3

...................

    環境:OSX10.8、Xcode4.5
    参照:
    https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual
    /KeyValueCoding/Articles/SearchImplementation.html#//apple_ref/doc/uid
    /20000955-CJBBFFA

    countOf メソッドと他の 2 つの可能なメソッドの少なくとも 1 つが
    すべての NSArray メソッドに応答するコレクション プロキシ オブジェクトは
    戻ってきた。コレクション プロキシ オブジェクトに送信される各 NSArray メッセージは、
    countOf、objectInAtIndex:、および AtIndexes: メッセージのいくつかの組み合わせで
    valueForKey: の元の受信者に送信されます。

私の手順:

1) MyObject.hにpropertyforを作成します。NSArray* arrs

2) MyObject.m で

@implementation MyObject
- (void)setArrs:(NSArray*)arrs
{ _arrs=arrs; }

- (NSUInteger) countOfArrs
{ NSLog("Im here");
  return 0;}

- (id) objectInArrsAtIndex:(NSUInteger)index
{ NSLog(@"objectInArrs");
  return nil;
}

@end

3) テストコード

MyObject* obj=[[MyObject alloc] init];
NSArray* arr=[NSarray arrayWithObjects:@"abc",nil];
[obj setArrs:arr];
NSLog(@"%d",[[obj valueForKey:@"arrs"]count]);
NSLog(@"%@",[[obj valueForKey:@"arrs"] objectobjectAtIndex:0])

私の質問:

countOfArrs私はそれが自動的に呼び出されることを期待していobjectInArrsAtIndex:ますが、そうではありませんでした。通常の NSArray を返し、カウント数を 1 と 'abc' で表示するだけです。

役立つサンプルが見つかりませんでした。または、ドキュメントの内容を誤解している可能性がありますね。

私のタング語は英語ではありません。

4

1 に答える 1

3

必要以上の機能を実装しました。あなたの@property宣言は-<key>ゲッターと-set<Key>アクセサーを追加しています。ご覧のとおり、ゲッター (によって呼び出されますvalueForKey:@"arrs") は、そのカウントとオブジェクトを返すプロパティに割り当てられた実際の NSArray を返しています。

リンク先のガイドには、valueForKey:セクションのデフォルトの検索パターンのステップ 1ステップ 2でこれが機能しなかった理由があります。

基本的に、-countOf<Key>andメソッドは、またはメソッド-objectIn<Key>AtIndex:がない場合にのみ呼び出されます。-<key>-get<Key>-is<Key>

これを機能させるには、@property宣言を削除してゲッターを削除する必要があります。次に、インスタンス変数を追加して配列を保存する必要があります。

これをあなたのインターフェースにすると、うまくいくはずです

@interface MyObject : NSObject {
  NSArray *_arrs;
}
@end
于 2013-07-05T21:27:29.883 に答える