2

KVCでいくつかのプロパティを更新しようとしています。プロパティが合成されました。

この行は機能します:

myObject.value = intValue;

これは機能しません:

[self setValue:[NSNumber numberWithInt:intValue] forKey:@"myObject.value"];

そして、次のように爆発します: キャッチされなかった例外によるアプリの終了'NSUnknownKeyException'、理由:'[<MyViewController 0xd1cec0> setValue:forUndefinedKey:]:このクラスはキーmyObject.valueのキー値コーディングに準拠していません。

さらにメソッド(awakeFromNib)のさらに上では、同じクラスの他のインスタンスがsetValue:forKey:呼び出しに正常に応答します。唯一の違いは、この特定のインスタンスがIBで作成され、接続されていることです。

4

3 に答える 3

9

の2番目の引数としてキーパスを渡すことはできません-[NSObject setValue:forKey:]setValue:forKeyPath:代わりに使用したい:

[self setValue:[NSNumber numberWithInt:intValue] forKeyPath:@"myObject.value"];

私の理解では、それsetValue:forKey:はパフォーマンスの最適化として提供されています。キーパスを取ることができないため、キー文字列を解析する必要はありません。

于 2009-07-08T19:47:32.370 に答える
7

これは、そのオブジェクトの有効なキーではないことを示しています。実際、そうではありません。「myObject.value」はキーパスであり、単一のキーではありません。

于 2009-07-08T19:35:49.040 に答える
1

私はチャックに同意します。

代わりにこれを行う必要があると思います:

[self setValue:[NSNumber numberWithInt:intValue] forKeyPath:@"myObject.value"];

または、次のようなキーパスの各部分を介して:

id myObject = [self objectForKey:@"myObject"];
[myObject setValue:[NSNumber numberWithInt:intValue] forKey:@"value"];
于 2009-07-08T19:43:13.377 に答える