0

我希望有人能解释我在这个非常令人沮丧但显然很简单的问题上哪里出错了,我在其他地方做过很多次,但已经打败了我,尽管倾吐了关于这个主题的所有 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 答案,并尝试了许多不同的方法来解决这个问题,但我无法让它发挥作用。我确信我遗漏了一些非常明显的东西,但我需要其他人才能看到它。

提前致谢!

4

1 回答 1

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:确定问题所在。如果您记录比较的双方,则根本原因应该很清楚。

于 2013-11-14T12:29:09.997 回答