2012-03-06 7 views
1

のためのローカライズされた説明を設定しようとしている私は、何かが間違っている場合は、エラーメッセージを設定しようとしているが、私はここでコードがクラッシュしたNSError

This class is not key value coding-compliant for the key NSLocalizedDescription 

は私が

-(id)getMoneyFromAccount:(int) sum error:(NSError **)error 
{ 
    if(self.balance - sum < 0) 
    { 
     NSDictionary *details = [NSDictionary dictionary]; 
     [details setValue:@"You don't have enough money" forKey:NSLocalizedDescriptionKey]; 
     *error = [NSError errorWithDomain:@"money" code:200 userInfo:details]; 
     return nil; 
    } 
    self.balance = self.balance - sum; 
    return [NSNumber numberWithInt:self.balance]; 
} 

答えて

8
を使用するコードです取得するとき

あなたはまたsetObject:forKey:

[details setObject:@"You don't have enough money" forKey:NSLocalizedDescriptionKey]; 

を呼び出すべきであるsetValue:forKey:を呼び出しています、あなたはNSDictionaryからNSMutableDictionaryに変更するか、または初期化子に値を設定する必要があります。

NSDictionary *details = [NSDictionary 
    dictionaryWithObject:@"You don’t…" 
    forKey:NSLocalizedDescriptionKey]; 

setValue:forKey:は可変辞書で動作しますが、それは直接setObject:forKey:を呼び出す方が良いでしょう。

+0

あなたは、私はNSDictionaryのは、setObjectメソッドに応答しないこと」を取得示唆として、私は、コードを変更します:forKey " – foho

+0

はい、私はあなたが普通の不変の辞書を使ったことを忘れていました。私は答えを編集したので、コードが機能するようになりました。 – zoul

0

いいえ、setValue:forKey:は正しい使用方法です。これはNSDictionaryではなくNSMutableDictionaryを作成する必要があるためです。

+0

NSDictionaryではありません(不変) – JeremyP

+0

私はあなたが言っていることを理解していませんか? [NSDictionary dictionaryWithDictionary:mutableDictionary]を使用して、常にNSDictionaryを取得できます。変更可能な辞書から。 – Ganzolo

+0

彼はあなたの最初の文に応答しています。 'NSDictionary'は' setValue:forKey: 'に' NSLocalizedDescription'キーで応答しません。 – zoul

0

NSMutableDictionaryまたは初期設定子を使用して値を設定する必要があります。 NSDictionaryは、初期化しても変更できません。

NSDictionary* details = [NSDictionary dictionaryWithObject: @"..." 
                forKey: NSLocalizedDescriptionKey]; 
1

あなたはinitalizedさNSErrorためlocalizedDescriptionを変更する必要がある場合、あなたはNSErrorクラスをオーバーライドすることができ、このような:

@interface ValidationError : NSError 

@property (nonatomic, strong) NSString *localizedDescription; 
@end 
関連する問題