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
个对象。
我哪里错了? 提前致谢
答案 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"];
}
}