설명서를 올바르게 읽은 경우 개체는 (대다 관계라고도하는) 인덱싱 된 속성에 대한 관찰자로 등록 할 수 있습니다. 보통의 스칼라 속성.코코아 - KVO 및 인덱스 된 속성에 대한 자동 알림
나는 인덱싱 된 접근자를 구현했으며 배열 컨트롤러가 테이블보기를 채우기 위해이 배열을 사용하고 변경할 수있는 프록시 배열이이를보고 사용하기 때문에 배열 된 접근자를 구현했습니다. 이들의 프로토 타입은 다음과 같다 :
// Make indexable accessors for data:
- (NSUInteger)countOfData;
- (id)objectInDataAtIndex:(NSUInteger)index;
- (NSArray *)dataAtIndexes:(NSIndexSet *)indexes;
- (void)insertObject:(NSDictionary *)dict inDataAtIndex:(NSUInteger)index;
- (void)insertData:(NSArray *)dataArray atIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromDataAtIndex:(NSUInteger)index;
- (void)removeDataAtIndexes:(NSIndexSet *)indexes;
나는 NSDocument는 다음과 같은 방법으로 수신하도록 등록 : 실제로이의 문서에 구체적인 예를 본 적이 없다
[self addObserver:self
forKeyPath:@"data"
options:(NSKeyValueObservingOptionNew |
NSKeyValueObservingOptionOld |
NSKeyValueObservingOptionInitial |
NSKeyValueObservingOptionPrior)
context:dataArrayChange];
하지만 페이지
그래서 내 질문은 : 다음을 얻을 수있는 방법이있다 (아래)을 향해 아래로 수동으로 작업을 수행하는 방법에 대한 예제가있다 자동으로 알림을 받거나 문서의 예와 같이 수동으로해야합니까?
편집 추가 :
첫째, 문맥의 비트 -이 NSDocument가 (각 객체가 사전 인) 데이터 인덱스 속성, 어레이 컨트롤러를 보유하는 매우 간단한 NSDocument 기반 애플리케이션에 대해 인 데이터 속성에 바인딩되고 테이블보기에 데이터가 표시됩니다. 알림을 원하는 이유는 실행 취소를 구현하려는 것이고 알림이 작동하면 모든 것이 잘 작동한다는 것입니다.
둘째로 -init
메서드의 dataProxy = [[self mutableArrayValueForKey:@"data"] retain];
호출로 만든 프록시를 통해 데이터에 액세스 할 때 문제가 발생합니다.
내가 프록시에 사용한 호출은 다음과 같습니다
는[dataProxy addObject: <an object>]
이 접근 예상하지만 알림을 생성하지 않는 insertData:atIndexes:
호출합니다. 이런 내가 직접 호출하는 경우
:
예상 및 자동 알림을 생성하는대로 작동[self insertData: <an object> atIndexes: [NSIndexSet indexSetWithIndex:[data count]]];
.
위의 두 메소드 모두 동일한 접근자를 호출하며 나에게 영향을 미치는 미묘한 세부 사항이있을 수 있습니다.
마지막으로 배열 컨트롤러가 접근자를 호출하고 알림이 생성됩니다.
아마도 관련 : http://stackoverflow.com/q/19932947/390581 첫 번째 관찰자가 등록 된 후 ** mutableArrayValueForKey :'**를 사용하여 프록시를 만들어야합니다. –
@ Jean-PhilippePellet 질문과 답변에 대한 정보가 많아서 중복으로 투표를 마감 할 것입니다. 같은 일을해도 좋습니다! – Monolo