setValue:forKey:
は、取り除かれているかのようにNULL
値を扱います。キー値コーディング - setValue:forKey:値がNULLです
[myObj setValue:[aDictionary valueForKey:@"keyDoesNotExist"] forKey:@"anotherKey"];
コードのクラッシュのこの行をaDictionary
キーkeyDoesNotExist
が含まれていない場合:しかし、私はそのようなことは一貫してクラッシュし、次のように例があります。その周りには何か方法はありますか?ここで適切なことは何ですか?
myObjはNSManagedObject
のインスタンスです。 "anotherKey"は、myObjが "anotherKey"の多くを含むことができる1対多の関係です。
ありがとうございます。私が先に進んでsetNilValueForKey:を定義したとしても、EXEC_BAD_ACCESSを取得しています。 aDictionaryは間違いなく存在し、そこに他のキーがありますが、keyDoesNotExistキーはありません。 – randombits
私の答えは、あなたの質問にまだ追加していないので、myObjcがNSManagedObjectであるという事実を考慮しませんでした。つまり、EXC_BAD_ACCESSはメモリー管理エラーを示しています。これは、割り振り解除されたオブジェクトにメッセージを送信する(メソッドを呼び出す)ためです。言い換えれば、 'setValue:ForKey:'をnil値で呼び出す問題ではなく、おそらくメモリ管理の問題です。より多くのコードを見ることなく、診断することは不可能です。 Instruments 'Zombies instrumentを使用してプログラムを実行してみてください。 –
NSZombieEnabledを、実行可能ファイルの環境変数としてYESの値で追加する必要があります。その後、コードを再実行します。ゾンビの場合は、コンソールに「 - [MyClass methodName]メッセージが割り当て解除されたインスタンスに送信されました」というエラーメッセージが表示されます。 – Roberto