2011-09-07 45 views
0

我一直在爭奪這個問題了幾天,覺得我已經找到了問題...的NSXMLParser問題

我使用的是ASIHTTPRequest方法連接到我的PHP腳本,從數據庫中調用請求數據時,從那裏我啓動NSXMLParser委託一切似乎工作正常,我甚至可以NSLog結果,因爲他們得到解析但是,似乎當我嘗試將這些結果放入一個NSMutableArray結果似乎不想進入它..我保持空值..

我希望有人可以給我一個理由爲什麼或如果你能指出我終於解決這個問題,因爲它成爲一個真正的痛苦在後面..

這是我的分析過程

- (IBAction)setRequestString:(NSString *)string 
{ 
    //set up address 
    NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"http://127.0.0.1:8888/CodeTest/"]; 
    [databaseURL appendString:string]; 
    //call delegates 
    NSURL *url = [NSURL URLWithString:databaseURL]; //LIVE mode 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request setDelegate:self]; 
    [request startAsynchronous]; 
} 

- (void)requestFinished:(ASIHTTPRequest *)request 
{  
    NSString *responseString = [request responseString]; //Pass request text from server over to NSString 
    NSData *capturedResponseData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", responseString); 
    [self startTheParsingProcess:capturedResponseData]; 
} 

- (void)requestFailed:(ASIHTTPRequest *)request 
{ 
    NSError *error = [request error]; 
    NSLog(@"%@", error); 
} 





#pragma mark - Parsing lifecycle 
//--- Start parsing process using NSXMLParser ---------------->> 
- (void)startTheParsingProcess:(NSData *)parserData 
{ 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //incoming parserDatapassed to NSXMLParser delegate which starts parsing process 

    [parser setDelegate:self]; 
    [parser parse]; //Starts the event-driven parsing operation. 
    [parser release]; 

    [self.tableView reloadData]; 

} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqual:@"item"]) { 
     // NSLog(@"Found title!"); 
     itemString = [[NSMutableString alloc] init]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [itemString appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqual:@"item"]) { 
     //NSLog(@"ended title: %@", itemString); 
     [myDataArray addObject:itemString]; 
     NSLog(@"%@", itemString); 
     NSLog(@"%@", myDataArray); 

     //TODO: Test release on memory consumption etc 
     [itemString release]; 
     itemString = nil; 
    } 
} 
//--- Finish parsing process using NSXMLParser ---------------->> 

它打印此

2011-09-08 08:46:24.424 iCode[1209:207] <?xml version="1.0"?> 
<entries> 
     <item>Honda</item> 
     <item>Nissan</item> 
     <item>Mitsubishi</item> 
     <item>Toyota</item> 
     <item>Mazda</item> 
</entries> 
2011-09-08 08:46:24.426 iCode[1209:207] Honda 
2011-09-08 08:46:24.426 iCode[1209:207] (null) 
2011-09-08 08:46:24.427 iCode[1209:207] Nissan 
2011-09-08 08:46:24.427 iCode[1209:207] (null) 
2011-09-08 08:46:24.428 iCode[1209:207] Mitsubishi 
2011-09-08 08:46:24.428 iCode[1209:207] (null) 
2011-09-08 08:46:24.430 iCode[1209:207] Toyota 
2011-09-08 08:46:24.431 iCode[1209:207] (null) 
2011-09-08 08:46:24.431 iCode[1209:207] Mazda 
2011-09-08 08:46:24.432 iCode[1209:207] (null) 
+0

你能告訴的地方,那裏的myDataArray聲明? –

回答

1

你的myDataArray是nil,你只需要在startTheParsingProcess:之類的地方分配它。

例子:

- (void)startTheParsingProcess:(NSData *)parserData 
{ 
    //You could release and create a new array like this example 
    //or check if nil, and if nil create the array else remove all objects. 
    [myDataArray release]; 
    myDataArray = [[NSMutableArray alloc] init]; 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //incoming parserDatapassed to NSXMLParser delegate which starts parsing process 

    [parser setDelegate:self]; 
    [parser parse]; //Starts the event-driven parsing operation. 
    [parser release]; 

    [self.tableView reloadData]; 
} 
+0

ohhhh ...我以爲我瘋了!大聲笑嘗試了很多不同的東西dag-nagit!對此感激不盡。 –

+0

不客氣,一定要在'dealloc' – Joe

+0

;)再次感謝:P –

1

我想你會發現,你的伊娃myDataArray爲零。這是因爲你從未初始化它。