..................
Environment:OSX10.8, Xcode4.5 Reference: https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual /KeyValueCoding/Articles/SearchImplementation.html#//apple_ref/doc/uid /20000955-CJBBBFFA If the countOf method and at least one of the other two possible methods are found, a collection proxy object that responds to all NSArray methods is returned. Each NSArray message sent to the collection proxy object will result in some combination of countOf, objectInAtIndex:, and AtIndexes: messages being sent to the original receiver of valueForKey:.
我的步骤:
1)在MyObject.h中为property
创建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'。
我没有找到任何有用的样本,或者我误解了医生说的话,不是吗?
我的语言不是英语,希望我没有提出任何雄心勃勃的问题。
答案 0 :(得分:3)
您实施的功能超出了所需的功能。您的@property
声明正在添加-<key>
getter和-set<Key>
访问者。正如您所知,您的getter(由valueForKey:@"arrs"
调用)返回分配给该属性的实际NSArray,该属性返回其计数和对象。
您链接到的指南有理由说明这在默认搜索模式的步骤1 和第2步中无法使用,因为valueForKey: section。
基本上,只有在没有-countOf<Key>
,-objectIn<Key>AtIndex:
或-<key>
方法时才会调用-get<Key>
和-is<Key>
方法。
为了使其工作,你需要通过删除@property
声明来删除getter,然后你需要添加一个实例变量来保存你的数组。
将此设为您的界面,它应该可以正常工作
@interface MyObject : NSObject {
NSArray *_arrs;
}
@end