どの状況で、オブジェクトはキーと価値のコーディングに準拠していませんか?
-
18-09-2019 - |
質問
現在、キー価値のコーディングに関するすべてのものを学んでいます。
ドキュメントで彼らは言う:
キー価値のないキーパスシーケンス内のオブジェクトは、適切なキーに準拠しています。
私は、オブジェクトがキーと価値のコーディングに準拠していない状況を想像しようとします。どうすれば起こりますか?私がuiviewをサブクラス化するとき、それは明らかに準拠していますよね?しかし、nsobjectでスーパークラスとして自分のオブジェクトを作るだけで、それはどうですか?そして、私がスーパークラスのないクラスを作るとき、確かにこれはKVに準拠していませんか?
解決
注意深く読むと、「キー価値コーディングに準拠している」と表示されます。 適切なキーの場合"。これは、基本的に、あなたが求めたキーに適切なKVCメソッドを持っていないことを意味します。 [[NSString stringWithString:@"foo"] valueForKey:@"dippingSauce"]
, 、それはに落ちるでしょう valueForUndefinedKey:
nsStringはキー「ディッピングスエス」にkvc準拠ではないため、 dippingSauce
インスタンスメソッドまたはa dippingSauce
Ivar。
他のヒント
「それはキー価値のコーディングに準拠していません 適切なキーの場合」それが意味することはそれです
@interface MyObject : NSObject {
NSString *foo;
NSString *bar;
}
@property (nonatomic, retain) NSString *foo;
@property (nonatomic, retain) NSString *bar;
@end
@interface MyObject
@synthesize foo;
@synthesize bar;
@end
「foo」と「bar」に準拠していますが、「baz」ではありません。
それに存在するすべての単純なプロパティの場合、デフォルトではすべてのNSObjectサブクラスが基本的なKVCを実装します。それはコレクションでよりトリックになります。 KVCがコレクションのために正しく働くために(だからあなたは次のようなことをすることができます:
NSArray *people = ... ;
NSArray *firstNames = [people valueForKey:@"firstName"];
特定の追加方法を実装する必要があります。一般に、その機能の最大のユーザーは、CoreData(とにかく追加の収集方法が自動的に生成される)から調達されたココアバインディング(iPhoneで利用できません)です。そのため、通常は基本的に自動的に処理されます。一般的に、人々は実際にそれらを公開するつもりがない限り、オブジェクトに辞書または配列の完全なKVCサポートを実装することを気にしません。あなたはできる 読んだ KVCガイドのコンプライアンスについて。