하위 그래프 내의 모든 변경 사항을 어떻게 추적 / 관찰 할 수 있습니까?
일부 NSManagedObjects 하위 클래스가있는 NSManagedObjectContext가 있습니다. 내가하고 싶은 것은 최상위 개체가 포함 된 모든 개체의 속성, 연결 또는 속성 / 연결에 대한 변경 사항에 대한 알림을받는 것입니다.
컨텍스트의 'hasChanges'를 사용하면 충분한 세분성을 제공하지 않습니다. 개체 'isUpdated'메서드는 지정된 개체에만 적용됩니다 (연결에있는 항목은 적용되지 않음). 하위 그래프로 제한된 컨텍스트에서 변화를 관찰 할 수있는 편리한 (아마도 KVO 기반)이 있습니까?
NSManagedObjectContextObjectsDidChangeNotification
데이터 모델에 대한 모든 변경 사항을 선택하기 위해에서 수신 대기하고 싶을 것 입니다. 다음과 같은 코드를 사용하여 수행 할 수 있습니다.
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleDataModelChange:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:myManagedObjectContext];
컨텍스트 -handleDataModelChange:
변경시 트리거 됩니다 myManagedObjectContext
.
귀하의 -handleModelDataChange
: 방법은 다음과 같습니다.
- (void)handleDataModelChange:(NSNotification *)note
{
NSSet *updatedObjects = [[note userInfo] objectForKey:NSUpdatedObjectsKey];
NSSet *deletedObjects = [[note userInfo] objectForKey:NSDeletedObjectsKey];
NSSet *insertedObjects = [[note userInfo] objectForKey:NSInsertedObjectsKey];
// Do something in response to this
}
보시다시피 알림에는 어떤 관리 개체가 업데이트, 삭제 및 삽입되었는지에 대한 정보가 포함되어 있습니다. 이 정보에서 데이터 모델 변경에 대응할 수 있어야합니다.
다음은 Swift의 간단한 예입니다.
NotificationCenter.default.addObserver(forName: .NSManagedObjectContextObjectsDidChange, object: nil, queue: nil) { note in
if let updated = note.userInfo?[NSUpdatedObjectsKey] as? Set<NSManagedObject>, updated.count > 0 {
print("updated: \(updated)")
}
if let deleted = note.userInfo?[NSDeletedObjectsKey] as? Set<NSManagedObject>, deleted.count > 0 {
print("deleted: \(deleted)")
}
if let inserted = note.userInfo?[NSInsertedObjectsKey] as? Set<NSManagedObject>, inserted.count > 0 {
print("inserted: \(inserted)")
}
}
나를 위해 그것은 두 가지 기능을 따라 잃어버린 것입니다.
func controllerWillChangeContent(controller: NSFetchedResultsController) {
tableView.beginUpdates()
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.endUpdates()
}
참고 URL : https://stackoverflow.com/questions/2463950/how-can-i-track-observe-all-changes-within-a-subgraph
'UFO ET IT' 카테고리의 다른 글
Android : 비트 맵을 오버레이하고 비트 맵 위에 그리는 방법은 무엇입니까? (0) | 2020.12.14 |
---|---|
날짜 및 시간을 Unix 타임 스탬프로 변환 (0) | 2020.12.14 |
파이썬에서 리샘플링하지 않고 PDF에서 이미지를 추출 하시겠습니까? (0) | 2020.12.14 |
Git 저장소 재 패키지 실패 (0) | 2020.12.14 |
상대 시간에 대한 Javascript 타임 스탬프 (예 : 2 초 전, 1 주 전 등), 최상의 방법? (0) | 2020.12.14 |