2011-10-12 2 views
2

객관적 C에서 이와 비슷한 작업을 수행 할 수 있습니까? 예를 들어, 배열 수가 X이고, 그런 다음 Y가 발생하면 함수 Y가 트리거되기를 원하십니까? 따라서 NSArray에 대한 청취자가 포함됩니까?NSMutableArray의 크기에 대한 청취자 및 관찰자

+2

이것은 질문과 매우 유사합니다. http://stackoverflow.com/questions/302365/observing-an-nsmutablearray-for-insertion-removal. – Johnnywho

답변

1

나는 당신이 배열의 변화를 듣는 관찰자를 만들 수 있다고 믿는다. 트리거되었을 때 배열의 크기를 검사하고 조건이 충족되면 메서드 Y를 호출 할 수 있습니다.

-2

당신은 (예를 들어, 그것을 MutableArrayDelegate를 호출) 프로토콜을 쓸 수, 다음 NSMutableArray는 특정 이벤트가 발생하는 경우 대리자 메서드 호출 (적절하게 [super ...]를 호출해야합니다) 연장.

@protocol MutableArrayDelegate 
- (void)mutableArrayDidAddObject:(NSMutableArray *)mutableArray; 
@end 

@interface ObservableMutableArray : NSMutableArray 
@property (nonatomic, assign) id<MutableArrayDelegate> delegate; 
@end 

@implementation ObservableMutableArray 
@synthesize delegate; 

- (void)addObject:(id)anObject 
{ 
    [super addObject:anObject]; 
    [delegate mutableArrayDidAddObject:self]; 
} 
@end 

당신은 다음 서브 클래스에 대리자를 지정하고 프로토콜을 구현하여 이벤트를 수신 할 수 있습니다 : 예를 들어

는 청취자에게 오브젝트가 추가 될 때마다 추가 할 수 있습니다.

+0

NSArray 클래스를 하위 클래스로 만들면 원시 인스턴스 메소드 인'count'와'objectAtIndex :'를 오버라이드해야합니다.'NSMutableArray'의 경우 더 많은 메소드를 오버라이드해야합니다 : http://developer.apple.com/library/ mac/# documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html # // apple_ref/occ/cl/NSMutableArray – hypercrypt

+0

나쁘다. 당신이 '[슈퍼 ...]'많이 부르는 것 같네요 ... 정말 downvote받을 자격이 있니? 여전히 원하는 결과를 제공합니다. – sho

+0

아니요, '슈퍼'를 호출하는 것만으로는 충분하지 않습니다. 직접 구현해야합니다. NSArray와 NSMutableArray는 클래스 클러스터이며, 아무것도 구현하지 않습니다. 배열을 만들면 private 서브 클래스를 얻게됩니다. 일반적으로 사용법과 구현 세부 사항은 중요하지 않지만 서브 클래 싱을하면 기본 인스턴스 메소드와 저장소를 직접 구현해야하므로 의존 할 수 없습니다 '슈퍼'. – hypercrypt