0

次のエラーを診断するためのヘルプを探しています:

* キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了します。

コードは次のとおりです。

NSMutableArray *soundNames = [[NSMutableArray alloc] initWithObjects:@"Random", @"Cricket", @"Mosquito", @"Fly", @"Owl", @"Scratching", @"Whistle", nil];

NSNumber *noObj = [NSNumber numberWithBool:NO];
NSMutableArray *soundValues = [[NSMutableArray alloc] initWithObjects:noObj, noObj, noObj, noObj, noObj, noObj, noObj, nil];

NSMutableDictionary *soundDict = [[NSMutableDictionary alloc]initWithObjectsAndKeys:soundNames, @"Sound Names", soundValues, @"Sound Values", nil]];

- (void)setSoundDictValue:(BOOL)value forKey:(NSString *)key
{
    [[soundDict objectForKey:@"Sound Values"] setValue:[NSNumber numberWithBool:value] forKey:key];
    …
}

ありがとうトニー。

4

2 に答える 2

0

辞書を正しく構築していません。なぜそうしないのですか:

NSMutableDictionary *soundDict = [@{
    @"Random" : @NO,
    @"Cricket" : @NO,
    @"Mosquito" : @NO,
    @"Fly" : @NO,
    @"Owl" : @NO,
    @"Scratching" : @NO,
    @"Whistle" : @NO
} mutableCopy];

次に、setSoundDictValue:forKey:メソッドは次のようになります。

- (void)setSoundDictValue:(BOOL)value forKey:(NSString *)key {
    sound[key] = @(value);
}

コードを分割すると、コードの問題を簡単に確認できます。

- (void)setSoundDictValue:(BOOL)value forKey:(NSString *)key {
    NSArray *sounds = [soundDict objectForKey:@"Sound Values"];
    [sounds setValue:[NSNumber numberWithBool:value] forKey:key];
}

ご覧のとおり、 を呼び出そうとしsetValue:forKey:ますNSArray

于 2013-07-13T17:37:04.800 に答える
0

配列で setValue:forKey を呼び出すと、その配列内の各オブジェクトで setValue:forKey が呼び出されます ( https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/を参照)。 NSArray.html )。は、 NSNumbers の配列である と[soundDict objectForKey:@"Sound Values"]同じです。soundValuesNSNumber には、Crickit という名前のプロパティがありません。正確に何をしようとしていますか?

于 2013-07-13T17:39:23.827 に答える