动态初始化NSDisctionary

时间:2013-06-22 17:20:58

标签: cocoa-touch nsdictionary

Whatup。我正在尝试在这里使用NSMutableDictionary,方法checkNull使用一些默认值初始化字典(如果未设置)。但是,iOS模拟器在第一次遇到for - 循环时崩溃。

错误讯息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber mutableCopyWithZone:]: unrecognized selector sent to instance

代码:

+ (void)checkNull {
    if ([[self defaults] valueForKey:@"channels"] == nil) {
        NSNumber *defaultValue = [NSNumber numberWithBool:YES];
        NSMutableDictionary *channels = [[NSMutableDictionary alloc] init];
        for (NSString *channel in [self channelsList]) {
            [channels setObject:[defaultValue mutableCopy] forKey:channel];
        }
        [[self defaults] setValue:channels forKey:@"channels"];
    }
}

[self defaults]会返回[NSUserDefaults standardDefaults] [self channelsList]会返回NSArray个大约10个NSString个对象。

我哪里错了? 提前致谢

1 个答案:

答案 0 :(得分:2)

NSNumber不回复mutableCopy

无论如何,你为什么要这么做?它们实际上是单例对象(事实上,对于低数字,它们实际上是单例)。

此外,您不再需要将BOOL转换为NSNumber,您可以使用文字。

+ (void)checkNull {
    if ([[self defaults] valueForKey:@"channels"] == nil) {
        NSMutableDictionary *channels = [[NSMutableDictionary alloc] init];
        for (NSString *channel in [self channelsList]) {
            [channels setObject:@YES forKey:channel];
        }
        [[self defaults] setValue:channels forKey:@"channels"];
    }
}