2014-11-12 2 views
1

NSXMLParser에서 문제가 발생했습니다.XCode 6.1 iOS 8.1 충돌 - NSXMLParser가 재진입 구문 분석을 지원하지 않습니다.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSXMLParser does not support reentrant parsing.' 

내가 this post 다른 솔루션을 시도했지만 오류가 여전히 발생 : 내 소스는 iOS7에/엑스 코드 5에서 잘 실행되지만 iOS8.1/엑스 코드 6. 충돌 오류가 충돌이다. 누구든지 나를 더 도울 수 있습니까? 이

AppDelegate.h 같은

내 소스

@interface AppDelegate : UIResponder <UIApplicationDelegate, NSXMLParserDelegate> 
{ 
    NSXMLParser *xmlParser_; 
... 
} 

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [self parseData]; 
    .... 
} 

- (void)parseData 
{ 
    titleList_ = [[NSMutableArray alloc] init]; 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:fDetail ofType:fXML]; 
    if (filePath) 
    { 
     NSString *myText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 
     if (myText) 
     { 
      countPage_ = 2; 
      NSData *xmlData = [myText dataUsingEncoding:NSUTF16StringEncoding];//NSUTF8StringEncoding]; 
      xmlParser_ = [[NSXMLParser alloc] initWithData:xmlData]; 
      xmlParser_.delegate = self; 
      [xmlParser_ parse]; 

     } 
    } 
} 

답변

1

동일한 코드는 아이폰 OS 8/엑스 코드 6 나를 위해 잘 작동합니다. 내 코드는 다음과 같습니다.

NSString *elementname; 
@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    [self parseData]; 
    return YES; 
} 

- (void)parseData 
{ 
    titleList_ = [[NSMutableArray alloc] init]; 
    NSString *fDetail = [NSString stringWithFormat:@"sample"]; 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:fDetail ofType:@"xml"]; 
    if (filePath) 
    { 
    NSString *myText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 
    if (myText) 
    { 
     countPage_ = 2; 
     NSData *xmlData = [myText dataUsingEncoding:NSUTF16StringEncoding];//NSUTF8StringEncoding]; 
     xmlParser_ = [[NSXMLParser alloc] initWithData:xmlData]; 
     xmlParser_.delegate = self; 
     [xmlParser_ parse]; 

    } 
    } 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    elementname = elementName; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    elementname = elementName; 
} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if([elementname isEqualToString:@"CatalogId"]) 
    { 
     int64_t cId = [string longLongValue]; 
     NSLog(@"%lld",cId); 
    } 

} 

@end

+0

감사합니다. 프리 야. 이제 나에게 도움이된다. 두 번 didStartElement (..), didEndElement :(..) 메서드를 잘못 이해했습니다. – Orion