NSDictionary objectForKey objectAtIndex检查if是否为null

时间:2016-03-09 13:52:08

标签: ios nsdictionary

我正在尝试检查我的NSDictionary的这个值是否为null:

if ([[dConfiguration objectForKey:@"ButtonsMenu"] objectAtIndex:count] != [NSNull null]){
    //stuff...
}

但是我收到了这个错误:

  

由于未捕获的异常'NSRangeException'而终止应用程序,原因:   ' - [__ NSCFArray objectAtIndex:]:index(5)超出边界(5)'

我知道这没有什么,这就是我正在检查的原因。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这很简单,看起来像

[dConfiguration objectForKey:@"ButtonsMenu"]

返回NSArray或类似内容,而不是发送它-objectAtIndex:,并提供索引count

错误告诉您数组有5个元素,并且您已经要求第六个元素。我不确定您要检查什么,为什么要将其与NSNull进行比较。

0:[first] 1:[second] 2:[third] 3:[forth] 4:[fifth]

看起来你只需要检查你的数组中是否至少有count个元素。

if([[dConfiguration objectForKey:@"ButtonsMenu"] count] > count)
{
    // stuff...
}

但是,请注意,这是针对您在集合中没有NSNull的情况(通常是这样)。即它只检查您的集合是否在索引count处具有元素。如果你在那里有NSNull,那么你应该检查它是否有索引元素,如果它不是NSNull

NSArray *buttonsMenu = [dConfiguration objectForKey:@"ButtonsMenu"];
if([buttonsMenu count] > count)
{
     id obj = [buttonsMenu objectAtIndex:count];
     if(obj != [NSNull null]) // it's ok to compare like that
     {
        // stuff...
     }
}

答案 1 :(得分:0)

并不是那里没有任何东西......甚至“那里”也不存在。

在尝试评估count的任何内容之前,检查您的objectAtIndex是否小于菜单中的对象数,包括它是否为空对象。