0

I have the following code to search the following dictionary:

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

Dict:

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

When running the first line, it correctly returns "shurooq". However, when I use my variable:

    NSArray *temp = [itemDict allKeysForObject:nextPrayerTime];

The log output of nextPrayerTime is simply 3:40 am as expected.

Why is this not working?

Many thanks!

4

3 回答 3

1

检查 的值nextPrayerTime,如果包含任何与then 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");
于 2013-07-05T18:22:20.430 回答
0

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

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

于 2013-07-05T17:59:05.080 回答
0

的价值是nextPrayerTime多少?

根据文档,allKeysForObject:返回

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

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

于 2013-07-05T17:52:01.383 回答