我正在从我的旧文件构建一个新项目。我忘了复制我的配置文件,当然它不起作用。我使用 NSXMLparser 读取配置文件,但没有正确报告错误。
使用 NSXMLParser 检测文件访问错误的正确方法是什么?
我正在使用错误的 URL 初始化 NSXMLParser 。初始化器返回一个有效的对象。
当我调用 [xml parse] 时,它返回 FALSE 表示错误。
但是 [xml parserError] 方法返回 null 。
我没有看到检测文件访问错误的良好编码序列。
根据要求,使用的代码:
- (void)parserNSXMLParser *)parser parseErrorOccurredNSError *)parseError
{ // Does not print with missing file
NSLog(@"Location File Error %@", parseError) ;
}
-(id) initWithURLNSURL *) 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 ;
}
Best Answer-推荐答案 strong>
为什么不使用 NSXMLParserDelegate 上的方法来识别您的错误? (除非您想验证您传递给解析器的 URL 先验。)
一个简短且功能不完整的示例:
#import <Foundation/Foundation.h>
@interface Foo:NSObject <NSXMLParserDelegate>
@property (nonatomic, strong) NSXMLParser *parser;
@end
@implementation Foo
- (void)parserNSXMLParser *)parser parseErrorOccurredNSError *)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 Untitled[2521:507] Error - {
NSXMLParserErrorColumn = 36;
NSXMLParserErrorLineNumber = 95;
NSXMLParserErrorMessage = "StartTag: invalid element name\n"; }
关于ios - NSXMLParser 的错误处理,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/22705821/
|