应用程序在第二次运行nsnull计数循环时崩溃

时间:2014-01-07 18:47:08

标签: ios objective-c

我有一个循环,第一次正常工作,但第二次循环我得到:

-[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没有照片时它会崩溃,但我不明白为什么我启动它上面的数组。

3 个答案:

答案 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,具体取决于具体情况,则在尝试计算或采取其他操作之前,必须先检查它是否为数组。