搜索字典工作查找硬编码变量,但否则崩溃

时间:2013-07-05 17:37:51

标签: ios objective-c nsarray

我有以下代码来搜索以下字典:

//NSString *knownObject = @"3:40 am";
NSArray *temp = [itemDict allKeysForObject:knownObject];
NSString *key = [temp objectAtIndex:0];
NSLog(@"prayer: %@", key);

字典:

{
    asr = "4:23 pm";
    dhuhr = "12:02 pm";
    fajr = "1:16 am";
    isha = "10:47 pm";
    maghrib = "8:24 pm";
    shurooq = "3:40 am";
}

运行第一行时,它会正确返回“shurooq”。但是,当我使用我的变量时:

    NSArray *temp = [itemDict allKeysForObject:nextPrayerTime];

nextPrayerTime的日志输出只是预期的3:40 am

为什么这不起作用?

非常感谢!

3 个答案:

答案 0 :(得分:1)

检查nextPrayerTime的值,如果itemDict包含与nextPrayerTime相同的任何对象,则[itemDict allKeysForObject:nextPrayerTime];将返回一个键数组,否则它将返回空数组。

在你当前的情况下无论如何你得到一个空数组,但是当你试图访问[temp objectAtIndex:0]时,编译器找不到任何对象,它会得到一个超出绑定异常的数组,这会导致你的应用程序崩溃。 ...

要克服此异常,您应该检查数组中对象的数量......

NSArray *temp = [itemDict allKeysForObject: nextPrayerTime];
if([temp count] > 0) {
    NSString *key = [temp objectAtIndex:0];
    NSLog(@"prayer: %@", key);
} else
    NSLog(@"NO Object Found");

答案 1 :(得分:0)

nextPrayerTime的价值是什么?

根据文档,allKeysForObject:返回

  

一个新数组,包含与字典中所有出现的anObject相对应的键。如果找不到与anObject匹配的对象,则返回一个空数组。

根据给出的信息,我猜你会得到一个空数组,当你调用[temp objectAtIndex:0]时,你正在访问一个不存在的索引,并获得一个越界异常。

答案 2 :(得分:0)

我不是100%肯定我的答案,但当对象是NSString时,方法isEqualToString用于比较对象吗?

否则,您可能需要与字典中的原始对象进行比较(使用相同的NSString)。