2013-03-05 112 views
0

Im有空格添加对象到我的2个NSMutableArrays。数据来自数据库,我知道我的解析是正确的,因为我使用NSLog时得到有效的输出。但是我不知道如何将2个不同的对象添加到我的2个不同的NSMutableArrays中。这里是我的代码添加对象到NSMutableArray时遇到问题

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    allDataDictionary = [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil]; 
    feed = [allDataDictionary objectForKey:@"feed"]; 
    arrayOfEntry = [feed objectForKey:@"entry"]; 

    for (NSDictionary *dictionary in arrayOfEntry) { 

     NSDictionary *title = [dictionary objectForKey:@"title"]; 
     NSString  *labelTitle = [title objectForKey:@"label"]; 

     [arrayLabel addObject:labelTitle]; 

     NSDictionary *summary = [dictionary objectForKey:@"summary"]; 
     NSString  *labelSummary = [summary objectForKey:@"label"]; 

     [arraySummary addObject:labelSummary]; //This line makes the application crash 

    } 

} 

出于某种原因,当我要添加labelSummary到arraySummary我得到这个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 

任何帮助表示赞赏。

+4

你对错误信息有什么想法? – 2013-03-05 18:55:40

+0

我看不到'insertObject:atIndex:'的调用。 – trojanfoe 2013-03-05 18:57:27

+0

@trojanfoe:'addObject:'通过调用。 – 2013-03-05 19:05:37

回答

2

您的解析确实是正确的。但是,当解析器遇到空字段时,它返回nil。问题是NSArrays不能接受nils,因为nil不是一个对象,它相当于0.因此,你最需要添加一个对象。这是NSNull的作用。

必须测试以查看解析器是否返回nil,如果是,则添加[NSNull null]。

NSString* labelSummary = [summary objectForKey:@"label"]; 

[arraySummary addObject:(labelSummary!=nil)?labelSummary:[NSNull null]; 
+0

你摇滚!有效!但是我怎么不需要为lableTitle这么做呢? – RockPaperScissors 2013-03-05 19:10:30

+0

@RockPaperScissors labelTitle没有回来,因为零。它的好的做法是在解析后测试全部为零,除非应该抛出一个无值的错误 – TMacGyver 2013-03-05 19:14:00

+0

好的谢谢。真的很感激它! – RockPaperScissors 2013-03-05 19:15:14

1

错误消息告诉您,您尝试添加到数组中的一个对象为零。

必须更换

[arrayLabel addObject:labelTitle]; 

if (labelTitle != nil) { 
    [arrayLabel addObject:labelTitle]; 
} 

[arraySummary ADDOBJECT:labelSummary]。

if (labelSummary != nil) { 
    [arraySummary addObject:labelSummary]; 
} 

如果你真的需要包括零对象,然后使用NSNull。