0

どうした。辞書が設定されていない場合、いくつかのデフォルト値で辞書を初期化NSMutableDictionaryするメソッドを使用して、ここで使用しようとしています。checkNullただし、iOS シミュレーターは -loop での最初の遭遇でクラッシュし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]を 返しますが、約 10 個のオブジェクトを含む を[self channelsList]返します。NSArrayNSString

どこが間違っていますか?前もって感謝します

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 に答える