2013-02-03 118 views
1

我在網上使用簡單的tutorial來解析xml和NSXMLParser。 委託對象執行init操作,但從不觸發NSXMLParser委託方法。 什麼即時通訊做錯了?在Windows上使用GNUSetup即時通訊軟件 。objective c NSXMLParser委託類不會觸發委託方法

這裏就是我所說的解析器:

-(BOOL) loadXmlPath :(NSString*)filePathXml:(NSString*) filePathWrite 
{ 
    if([fileMgr fileExistsAtPath:filePathXml] == YES) 
    { 
     NSLog(@"%@",filePathXml);  
     NSURL *xmlURL = [NSURL fileURLWithPath:filePathXml]; 
     NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
     if(nsXmlParser) 
     { 
      NSLog(@"done setup parser"); 
     } 
     else 
     { 
      NSLog(@"fail setup parser"); 
     } 
     // create and init our delegate 
     XMLParser *parser = [[XMLParser alloc] initXMLParser]; 
     [nsXmlParser setShouldProcessNamespaces:NO]; // We don't care about namespaces 
    [nsXmlParser setShouldReportNamespacePrefixes:NO]; // 
    [nsXmlParser setShouldResolveExternalEntities:NO]; // We just want data, no other stuff 
    // set delegate 
    [nsXmlParser setDelegate:parser]; 
    // parsing... 
    BOOL success = [nsXmlParser parse]; 
     // test the result 
    if (success) { 
     NSLog(@"parsing document!"); 
     // get array of users here 
    } else { 
     if ([nsXmlParser parserError]) { 
      NSError *err = [nsXmlParser parserError]; 
      NSString *serror = [err localizedDescription]; 
      NSLog(@"Error parsing document!%@\n",serror); 
     } 
     NSLog(@"Error parsing document!"); 
    } 
    } 
    return NO; 
} 

XmlParser.h

#import <Foundation/Foundation.h> 

@interface XMLParser : NSObject 
{ 
    NSXMLParser *parser; 


} 
-(XMLParser *) initXMLParser; 
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict; 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string; 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName; 

@end 

XmlParser.m

#import "XMLParser.h" 
@implementation XMLParser 



- (XMLParser *) initXMLParser { 
    self = [super init]; 
    NSLog(@"Init xml parser"); 

    return self; 
} 


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 

    NSLog(@"Enter parser 1"); 
    if ([elementName isEqualToString:@"name"]) { 
    NSLog(@"%@",elementName); 

     return; 
    } 

    if ([elementName isEqualToString:@"person"]) { 

     return; 
    } 

    if ([elementName isEqualToString:@"lastName"]) { 

     return; 
    } 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    NSLog(@"Enter parser 2"); 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    NSLog(@"Enter parser 3"); 

    if (([elementName isEqualToString:@"addresses"]) || 
     ([elementName isEqualToString:@"address"])) return; 

    if ([elementName isEqualToString:@"person"]) { 

     return; 
    } 

} 

@end 

它從來沒有達到解析器方法。但是它的確到達了initXMLParser。 我在這裏做錯了什麼? 也即時得到的:犯錯localizedDescription] 這條消息:

NSXMLParserErrorDomain 3

這是什麼意思?

+0

XMLParser的*解析器= [[XMLParser的頁頭] initXMLParser]。 [nsXmlParser setShouldProcessNamespaces:NO]; //我們不關心名稱空間 [nsXmlParser setShouldReportNamespacePrefixes:NO]; // [nsXmlParser setShouldResolveExternalEntities:NO]; //我們只是想要數據,沒有其他東西 //設置代理 [nsXmlParser setDelegate:self]; //代替語法分析器把它放到自我 //解析... BOOL success = [nsXmlParser parse]; – Kasaname

回答

0

在你XmlParser.h你需要證明你實現解析器委託

此行

@interface XMLParser : NSObject 

應該

@interface XMLParser : NSObject <NSXMLParserDelegate> 

編輯:

你的init是也是NG,它應該是如下

- (XMLParser *) initXMLParser { 
    self = [super init]; 
    NSLog(@"Init xml parser"); 

    return self; 
} 

你忘記的[super init]值分配給自

+0

我添加了這個但仍然失敗,達到: – user63898

+0

我編輯了代碼,你沒有給'self'設置一個值 – Flexicoder

+0

我編輯代碼(看原始msg) 還增加了錯誤檢查和im得到: NSXMLParserErrorDomain 3 ..這是什麼意思? – user63898