주 스레드 용 MOC와 백그라운드 스레드 용 MOC 두 가지 MOC를 사용하고 있습니다. 메인 스레드에서 나는 FRC (NSFetchedResultsController)로 작업하는 UITableView를 가지고있다.CoreData는 백그라운드 MOC에서 저장 작업 중에 오류를 수행 할 수 없습니다.
많은 저장 작업을 실행하면 모든 개체가 삭제되고 몇백 개의 새 개체가 생성됩니다 ...이 시점에서 주 스레드의 UITableView에서 데이터를 새로 고치려면 FRC를 사용하는 것이 좋습니다). 따라서 주 MOC는 (배경 MOC에서받은) NSManagedObjectContextDidSaveNotification 알림에 등록하고 해당 단계에서 mergeChangesFromContextDidSaveNotification을 실행하여 UITableView가 그에 따라 업데이트되는지 확인합니다.
저장 작업 중에 UITableView를 스크롤하려고 할 때까지이 모든 것이 제대로 작동합니다. 내가보기를 스크롤하려고하면 "coredata는 잘못을 이행 할 수 없습니다"예외가 발생합니다. 이것은 FRC가 여전히 삭제 된 개체를 보유하고있는 결과입니다 (저장 작업이 여전히 실행되는 동안 주 MOC에서 NSManagedObjectContextDidSaveNotification 알림의 mergeChangesFromContextDidSaveNotification이 수신됩니다). 이것은 mergeChangesFromContextDidSaveNotification을받은 후 저장 작업과 UITableView 업데이트 사이의 일종의 "경쟁 조건"입니다.
이 두 MOC와 함께 작업하고 FRC를 돌보아이 시나리오에 대처할 수있는 올바른 접근 방법은 무엇입니까? apples doc 당으로
감사합니다. 나는이 글을 읽었습니다 ... "이 객체를 버리기"위해 설명한 아키텍처와 시나리오를 고려할 때 가장 좋은 방법은 무엇입니까? – Joel