0

怎么了。我正在尝试使用 a NSMutableDictionaryhere,checkNull如果未设置,则使用一些默认值初始化字典的方法。但是,iOS 模拟器在第一次遇到for-loop 时崩溃。

错误信息:

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对象。

我哪里错了?提前致谢

4

1 回答 1

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"];
    }
}
于 2013-06-22T17:25:44.947 回答