无法将对象添加到NSMutableArray

时间:2013-03-05 18:53:35

标签: objective-c nsmutablearray

我正在向我的2个NSMutableArrays添加对象。数据来自数据库,我知道我的解析是正确的,因为当我使用NSLog时,我得到有效的输出。但是我无法想出如何将2个不同的对象添加到我的2个不同的NSMutableArrays中。这是我的代码

-(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'

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

错误消息告诉您,您尝试添加到阵列的其中一个对象是nil。

你必须替换

[arrayLabel addObject:labelTitle];

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

[arraySummary addObject:labelSummary];

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

如果你真的需要包含一个nil对象,那么使用NSNull。