我正在向我的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'
感谢任何帮助。
答案 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。