4

나는 부모 < --- ---으로 구성된 핵심 데이터 다 대다 관계가 있습니다. 어떤 Child 객체 변경 사항 (예 : firstName, lastName)이 알림을 트리거 할 때 키 - 값 관측 메커니즘을 설정하고 싶습니다. 표준 KVO 구문 사용시 :대다수 관계 내의 KVO 객체 속성

[self.parentObject addObserver:self forKeyPath:@"children" options:NSKeyValueObservingOptionNew context:NULL] 

관계 자체를 수정 (즉, 자식 객체가 추가되거나 관계로부터 제거된다)이 단지 통지가 아니라를 그 자식들 중 하나의 속성을 변경 오브젝트들. 분명히 이것이 작동하도록 설계된 방법이므로 그와 관련된 문제는 없지만 어떻게 KVO를 사용하여 원하는 요구 사항을 충족시킬 수 있습니까?

미리 감사드립니다.

답변

4

AFAIK 단일 코드 줄을 사용하여 컬렉션 개체 속성을 관찰 할 수있는 기본 제공 방법이 없습니다. 대신 개체가 컬렉션에 삽입/제거 될 때 관찰자를 추가/제거해야합니다.

에 대한 설명과 샘플 프로젝트는 여기에 찾을 수 있습니다 https://web.archive.org/web/20120319115245/http://homepage.mac.com/mmalc/CocoaExamples/controllers.html 는 (이하 "컬렉션은 컬렉션에있는 개체의 속성을 관찰과 동일하지 않습니다 관찰"절을 참조하십시오)

업데이트 :
링크가 끊어졌습니다 - archive.org 스냅 샷으로 변경했습니다.

+0

링크가 깨졌습니다. –

+0

감사합니다. 나는 archive.org 스냅 샷을 가리 키도록 업데이트했습니다. –

3

조금 늦었지만 어쩌면이 기능을 사용하는 사람에게 유용 할 것입니다.

술부 @"parent == %@", child이있는 엔터티 하위에 대해 NSFetchedResultsController을 설정 한 다음 컨트롤러를 해당 fetchedResultController에 대한 대리인으로 추가 할 수 있습니다. 위임자는 자식 속성이 변경되거나 추가 될 때 호출됩니다. 예제 코드는 다음과 같습니다. 나는 또한 그럼 당신은 당신이 당신의 구현에 필요한 대의원 방법

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject 
    atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type 
    newIndexPath:(NSIndexPath *)newIndexPath { 

그리고 다른 대리자 메서드를 구현하는

... 
NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Child"]; 
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]; 

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"parent = %@", parent]; 
self.fetchResultsController.fetchRequest.predicate = predicate; 

self.fetchResultsController = [[NSFetchedResultsController alloc] 
    initWithFetchRequest:fetchRequest managedObjectContext:context 
    sectionNameKeyPath:nil cacheName:nil]; 

self.fetchResultsController.delegate = self; 
... 

에 자신의 이름으로 아이들을 정렬 정렬 설명을 추가 한 (문서가있다 이것에 대한 아주 좋은 코드 일각