どの状況で、オブジェクトはキーと価値のコーディングに準拠していませんか?

StackOverflow https://stackoverflow.com/questions/1163828

質問

現在、キー価値のコーディングに関するすべてのものを学んでいます。

ドキュメントで彼らは言う:

キー価値のないキーパスシーケンス内のオブジェクトは、適切なキーに準拠しています。

私は、オブジェクトがキーと価値のコーディングに準拠していない状況を想像しようとします。どうすれば起こりますか?私が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ガイドのコンプライアンスについて。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top