2013-06-22 1 views
0

Whatup. 여기에 NSMutableDictionary을 사용하려고합니다. 사전 설정을하지 않으면 일부 기본값으로 사전을 초기화하는 checkNull 메서드를 사용합니다. 그러나 iOS 시뮬레이터는 for -loop의 첫 번째 충돌에서 충돌합니다.동적으로 NSDisctionary 초기화

오류 메시지 :

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] 반환 약 10 NSString 객체와의 NSArray.

어디로 잘못 가고 있습니까? 미리 감사드립니다.

답변

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'라는 아이디어를 오해 한 것 같습니다. 고맙습니다. –

관련 문제