2013-06-22 52 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'的想法。謝謝。 –