2012-11-05 2 views
1

콘텐츠 배열이 File Array (내 윈도우 컨트롤러)의 모델 키 경로가 chartData.events로 설정되어있는 NSArrayController가 있습니다. chartData는 NSObject의 하위 클래스이며 이벤트는 합성 된 NSMutableArray 속성입니다.NSArrayController에 바인딩 된 NSMutableArray에 대한 변경 사항을 통지받는 방법은 무엇입니까?

chartData는 NSArrayController가 이벤트 객체에 이벤트 객체를 추가하고 제거하는시기를 알아야합니다. 나는 가변 인덱스 된 접근자를 구현하여이 작업을 수행해야한다고 생각했습니다. 내 chartData 클래스 구현에이를 넣어 :

- (void)insertObject:(TNLEvent *)event inEventsAtIndex:(NSUInteger)index { 
    [self.events insertObject:event atIndex:index]; 
    return; 
} 

- (void)insertEvents:(NSArray *)eventArray atIndexes:(NSIndexSet *)indexes { 
    [self.events insertObjects:eventArray atIndexes:indexes]; 
    return; 
} 

그러나 NSArrayController의 추가 할 때 그 방법 중 어느 것도라고 : 메시지가 전송됩니다. NSArrayController에서 사용하는 키 경로가 해당 메서드에 매핑되지 않거나 그렇지 않으면 키 - 값을 준수하지 않는다고 가정합니다. events에 개체를 추가하거나 제거 할 때 어떻게 알 수 있습니까?

업데이트 : 합성 된 접근 자 setEvents을 무시하고 배열 컨트롤러가 제어 할 배열에 개체를 추가 할 때마다 배열 컨트롤러가이 메서드를 사용한다는 것을 알았습니다. 따라서 변경 가능한 인덱스 첨부 접근자는 결코 사용되지 않습니다. 이것은 어떤 객체가 추가되었는지 아직 알 수 없기 때문에 나에게 도움이되지 않습니다.

답변

1

내 솔루션은 정확했지만 구현하지 못했습니다. 모든 액세서리는에 필요합니다.

이것은 구현되어야하는 접근 자의 최소 세트 인 것으로 보입니다.

- (void)insertObject:(id)object inEventsAtIndex:(NSUInteger)index; 
- (id)objectInEventsAtIndex:(NSUInteger)index; 
- (NSArray *)eventsAtIndexes:(NSIndexSet *)indexes; 
- (void)removeObjectFromEventsAtIndex:(NSUInteger)index; 

이러한 정보가있는 경우 어레이 컨트롤러는 어레이 속성에 setter getter 대신 해당 정보를 사용합니다.