2014-03-28 69 views
2

我正在從我的舊文件構建一個新項目。我忘了複製我的配置文件,當然它不起作用。我使用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 ; 
} 
+1

請爲您所做的工作添加代碼。 – ZeMoon

+0

可以在將URL傳遞給NSXMLParser之前驗證URL嗎? –

+0

NSURL * url = [NSURL fileURLWithPath:path]; –

回答

1

爲什麼不使用上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」; }