내 핵심 데이터 모델에서 "주소"엔티티에 바인딩 된 NSArrayController가 있습니다. 이 Address 엔티티에 삽입 할 새 객체를 모니터링하거나 삭제할 기존 객체를 모니터링하려고합니다. KVO를 통해이 작업을 수행하려고 시도하고 있지만이 작업에 대해 어떻게해야하는지 잘 모르겠습니다.NSArrayController 변경 관찰 : 삽입 또는 삭제 감지
[self.addressArrayController addObserver:self
forKeyPath:@"arrangedObjects"
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
context:@"Address"];
나는이에 관찰자 알림을받을 수 있나요 : 내로 awakeFromNib에서
, 나는 "arrangedObjects"에 대한 관찰자로 뷰 컨트롤러 클래스를 추가
이- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if(object == self.addressArrayController) {
// what do do here?
}
}
문제가 있다는 것입니다 변경 사전은 (아무리 오래된 Apple 버그로 인해서) 항상 nil입니다. 그래서 어떤 오브젝트가 추가되거나 삭제되었는지, 심지어 어떤 것이 추가되거나 삭제되었는지 전혀 알지 못합니다! 추가되거나 삭제 된 정확한 객체가 필요합니다.이 엔티티에 대한 모든 객체를 트래버스하고 객체의 타임 스탬프 또는 다른 기준에 따라 계산하지 않아도됩니다.
가장 좋은 방법은 무엇입니까?
이 경우에는, 당신은'new'와'old'리스트는'NSNull 것을 의미 '맞지? 나는 이것이 버그인지 여부는 아니지만 오랫동안 (적어도 10.4 이상) 문서화되지 않은 행동입니다. 그러나 사전이 비어 있지 않더라도'newObject'와'old'가'NSKeyValueChangeSetting'이 아닌'arrangedObjects'에 대한 알림을 본 적이 없으므로이 목적을 위해 사전이 쓸모 없게됩니다. 어쨌든 전체 차등을 수행해야합니다. 핵심 데이터를 사용하고 있으므로'NSManagedObjectContextObjectsDidChangeNotification'을 시도해 보셨습니까? – gaige
감사합니다. 이 경우 컨텍스트 알림을 사용하는 것이 좋습니다. –