그래서 이것을 알아 냈습니다. 내가 필요로하는 방법이었다 :
- (무효) awakeFromSnapshotEvents : (NSSnapshotEventType) 플래그 NSManagedObject의 서브 클래스에서 재정의 될 수
.
이 메서드는 객체가 실행 취소 또는 다시 실행의 영향을받을 때마다 호출됩니다. 이전에 실행 취소가 객체를 삽입하거나 삭제할 때 호출 된 느낌 이었지만 객체가 변경된 경우 호출됩니다.
이 메소드에서 수행하는 작업은 objectID가 포함 된 알림을 게시 한 다음 해당 알림을 받으면 내가받은 objectID에 해당하는 개체를 찾습니다. 내 NSManagedObject 하위 클래스에 따라서
, 내 awakeFromSnapshotEvents은 다음과 같습니다
- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags {
NSManagedObjectID *thisID = self.objectID;
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:thisID forKey:@"noticeObjectID"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"awakeFromSnapshotNotification" object:self userInfo:userInfo];
}
그리고 수신기의 viewWillAppear에서
, 나는 알림 등록 :
는
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didAwakeManagedObject:) name:@"awakeFromSnapshotNotification" object:nil];
마지막으로, 내 수신기의 didAwakeManagedObject:
방법은 같다 이. 아마이 방법을 사용하는 것이 더 좋을지 모르지만,이 방법이 저에게는 잘 작동합니다. 코어 데이터를 기반으로하는 NSOrderedSet 내에서 필요한 객체의 인덱스 위치에 대해 걱정할 수 있으므로 올바른 순서를 찾을 때까지 정렬 된 세트를 반복합니다.
- (void) didAwakeManagedObject:(NSNotification*)notice {
for (int i=0; i<project.orderedSet.count; i++) {
if ([notice.userInfo objectForKey:@"noticeObjectID"] == [[project.orderedSet objectAtIndex:i] objectID]) {
NSLog(@"%d IS EQUAL", i);
return;
}
}
}