2014-03-28 2 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에 전달하기 전에 유효성을 검사 할 수 있습니까? –

+0

NSURL * url = [NSURL fileURLWithPath : 경로]; –

답변

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"; }