3

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

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

    如果 countOf 方法和其他两种可能方法中的至少一种是
    找到,一个响应所有 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])

我的问题:

我希望它会自动调用countOfArrsobjectInArrsAtIndex:但是它没有。它所做的只是返回正常的 NSArray,以 1 和“abc”显示计数。

我没有找到任何有用的样本,或者我误解了医生所说的内容,不是吗?

我的语言不是英语,希望我没有提出任何雄心勃勃的问题。

4

1 回答 1

3

您已经实现了比所需更多的功能。您的@property声明是添加-<key>getter 和-set<Key>accessor。正如您所发现的,您的 getter(由 调用valueForKey:@"arrs")正在返回分配给返回其计数和对象的属性的实际 NSArray。

您链接到的指南有原因在valueForKey:部分的默认搜索模式的第 1 步第 2步中不起作用。

基本上,只有在没有 a或方法时才会调用您的-countOf<Key>and方法。-objectIn<Key>AtIndex:-<key>-get<Key>-is<Key>

为了让它工作,你需要通过删除@property声明来删除getter,然后你需要添加一个实例变量来保存你的数组。

将此作为您的界面,它应该可以工作

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