NSMutableDictionary objectForKey:从完整字典返回NULL

时间:2013-11-14 12:17:06

标签: null nsmutabledictionary

我希望有人可以解释这个极其令人沮丧但显然很简单的问题我在哪里出错了,我曾在其他地方做了很多次,但是尽管在这个话题上倾注了所有的SO问题,但却打败了我。

我在viewDidLoad中实例化一个NSMutable字典,

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.myDictionary = [[NSMutableDictionary alloc] init];

//这里有更多代码     }

然后使用

填充字典
[self.myDictionary setObject:[NSNumber numberWithInt:holidayDays] forKey:[self.holidayInfo objectForKey:@"days"]];

但是当我尝试获取特定键的值时,它们返回NULL,

    - (void) processHolidayLoop:(int)i forAKey:(NSString *)aKey using:(UIManagedDocument *)document
    {
        if ([self.myDictionary respondsToSelector:@selector(objectForKey:)]) {  NSLog(@"YES IT DOES");}
        int hDays = [[self.myDictionary objectForKey:aKey] intValue];
        NSLog(@"aKey is %@", aKey);
        NSLog(@"hDays is %d", hDays);
        NSLog(@"myDictionary valueForKey: is %@", [[self.myDictionary objectForKey:aKey] description]);

// more code here
    }

上面的代码NSLogs,YES IT DOES,aKey正确,但是当从另一个方法调用时,给出“hDays is(null)”和“myDictionary valueForKey:is(null)”,

NSString *aKey = [NSString stringWithFormat:@"holiday%d", j ];
[self processHolidayLoop:i forAKey:aKey using:self.document];

我已经使用以下方法检查了self.myDictionary中的值和键,并且我已经确认字典已正确填充了它的所有键和值。

- (void) describeDictionary:(NSDictionary *)dict
{
    NSArray *keys;
    int i, count;
    id key, value;

    keys = [dict allKeys];
    count = [keys count];
    for (i = 0; i < count; i++)
    {
        key = [keys objectAtIndex: i];
        value = [dict objectForKey: key];
        NSLog (@"Key: %@ has value: %@", key, value);
    }
}

我已经查看了这个问题的所有SO答案,并尝试了许多不同的方法来解决这个问题,但我无法让它发挥作用。我确信我错过了一些非常明显的东西,但我需要别人看到它。

提前致谢!

1 个答案:

答案 0 :(得分:0)

这一行:

if ([self.myDictionary respondsToSelector:@selector(objectForKey:)]) {  NSLog(@"YES IT DOES");}

永远是真的,因为NSMutableDictionary实现了objectForKey:

aKey将始终正确记录,因为您将其传递给方法。

如果您想查看字典是否包含特定密钥,您应该这样做:

if([self.myDictionary objectForKey:aKey]) {
    // Do your processing here
}

如果此代码永远不会执行,则该键不包含在字典中。我建议迭代allKeys,并使用isEqual:确切地确定问题所在。如果您记录比较的两侧,则应明确根本原因。