我有一个循环,第一次正常工作,但第二次循环我得到:
-[NSNull count]: unrecognized selector sent to instance 0x3a094a70
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull count]: unrecognized selector sent to instance 0x3a094a70'
以下是我的代码中我知道崩溃的部分(最后一行):
...
NSLog(@"dict::%@",dictForPost);
// collect the photo urls in an array
photosInDict = [NSArray array];
// photos is an array of dictionaries in the dictionary
photosInDict = dictForPost[@"photos"];
if (photosInDict.count) {
....
我知道当photosInDict没有照片时它会崩溃,但我不明白为什么我启动它上面的数组。
答案 0 :(得分:4)
photosInDict = dictForPost[@"photos"]
替换先前分配并存储在photosInDict
中的对象。
因此,之前分配数组没有意义。刚
NSArray * photosInDict = dictForPost[@"photos"];
然后检查
if ([photosInDict isKindOfClass:[NSArray class]]) {
// Yes, it is an array. Do something with it.
if ([photosInDict count]) {
...
}
}
答案 1 :(得分:4)
dictForPost[@"photos"];
的结果是给你一个NSNull
对象,而不是数组。
一种选择是:
NSLog(@"dict::%@",dictForPost);
// collect the photo urls in an array
// photos is an array of dictionaries in the dictionary
photosInDict = dictForPost[@"photos"];
if ([photosInDict isKindOfClass:[NSArray class]] && photosInDict.count) {
该行:
photosInDict = [NSArray array];
没有意义,应该删除。
答案 2 :(得分:0)
使用空数组初始化photosInDict
,然后用字典的“照片”值覆盖它,恰好是NSNull
。您需要检查字典为什么没有该键的数组。
如果值可以是NSNull
,具体取决于具体情况,则在尝试计算或采取其他操作之前,必须先检查它是否为数组。