2013-06-22 54 views
0

Whatup。我试图在这里使用NSMutableDictionary,方法checkNull用一些默认值初始化字典(如果未设置)。但是,iOS模拟器在for -loop中遇到的第一次崩溃。动态初始化NSDisctionsary

错误消息:

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

我哪里错了? 在此先感谢

回答

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"]; 
    } 
} 
+0

这样做。我想我误解了'mutableCopy'的想法。谢谢。 –