2013-04-12 2 views
3

..................IOS, KVC는 왜 countOf <Key>를 호출하지 않습니다

 
    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에서 NSArray* arrs에 대한 property을 만듭니다.

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

작동합니다. http://www.cocoabuilder.com/archive/cocoa/236041-kvc-array-proxy-objects.html 마침내, 아무도 그에게 대답하지 않았다. .. 아마 나는 같은 결과를 가질 것이다 ??? – MarcusHe

답변

3

필요한 것보다 많은 기능을 구현했습니다. @property 선언은 -<key> 게터와 -set<Key> 접근자를 추가합니다. 당신이 알아낼 수 있듯이, 당신의 getter (valueForKey:@"arrs"에 의해 불려 짐)는 그 카운트와 객체를 반환하는 속성에 할당 된 실제 NSArray를 리턴합니다. 섹션

당신이 연결이 설명서는이 1 단계단계 valueForKey에 대한 기본 검색 패턴이에서 작동하지 않는 이유를 가지고있다. 중 하나 -<key>, -get<Key> 또는 -is<Key> 방법이 없을 때

기본적으로, 당신의 -countOf<Key>-objectIn<Key>AtIndex: 방법 만이라고합니다.

이 작업을 수행하려면 @property 선언을 제거하여 getter를 제거해야하며 배열을 저장하려면 인스턴스 변수를 추가해야합니다.

이 당신의 인터페이스를 확인하고 그것은 불행하게도, 내가 SB 저와 같은 문제를 충족 찾을

@interface MyObject : NSObject { 
    NSArray *_arrs; 
} 
@end