错误处理NSXMLParser
问题描述:
我正在从我的旧文件构建一个新项目。我忘了复制我的配置文件,当然它不起作用。我使用NSXMLparser
来读取配置文件,但我没有正确报告错误。错误处理NSXMLParser
什么是NSXMLParser
检测文件访问错误的正确方法?
我正在使用一个错误的URL初始化NSXMLParser
。初始化程序返回一个有效的对象。
当我打电话给[xml parse]
时,它返回FALSE
表示有错误。
但[xml parserError]
方法返回null
。
我没有看到一个好的编码序列来检测文件访问错误。
按照要求,使用的代码:
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{ // Does not print with missing file
NSLog(@"Location File Error %@", parseError) ;
}
-(id) initWithURL:(NSURL *) url // For my class
{
self = [super init] ;
if (self)
{
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url] ;
xmlParser.delegate = self ;
if (![xmlParser parse])
{
NSError *error = [xmlParser parserError] ;
NSLog (@"Error parsing '%@'\n%@", url, error) ; // Error is null
}
}
return self ;
}
答
为什么不使用上NSXMLParserDelegate
的方法来识别你的错误? (除非你想验证您传递给解析器先验的URL。)
的短,功能上不完善例如:
#import <Foundation/Foundation.h>
@interface Foo:NSObject <NSXMLParserDelegate>
@property (nonatomic, strong) NSXMLParser *parser;
@end
@implementation Foo
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSLog(@"Error - %@",parseError.userInfo);
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
Foo *f = [Foo new];
NSURL *u = [NSURL URLWithString:@"http://badurl.alan"];
f.parser = [[NSXMLParser alloc] initWithContentsOfURL:u];
f.parser.delegate = f;
[[f parser] parse];
}
}
打印以下控制台:
2014-03-28 05:33:11.082无标题[2521:507]错误 - NSXMLParserErrorColumn = 36; NSXMLParserErrorLineNumber = 95; NSXMLParserErrorMessage =“StartTag:元素名称无效\ n”; }
请为您所做的工作添加代码。 – ZeMoon
可以在将URL传递给NSXMLParser之前验证URL吗? –
NSURL * url = [NSURL fileURLWithPath:path]; –