2010-01-28 2 views
5

NSFetchedResultsController가 'main'NSManagedObjectContext를 기반으로 UITableView를 채울 수 있도록 설정되어 있습니다.NSFetchedResultsController가 다른 컨텍스트의 업데이트를 표시하지 않습니다.

타이머에서는 객체를 별도의 NSManagedObjectContext에 계속 추가하지만 NSPersistantStoreCoordinator를 주 컨텍스트와 공유합니다.

NSManagedObjectContextWillSaveNotification 알림이 전송되는 것을 볼 수 있으며 응용 프로그램을 다시 종료하면 이전에 실행 한 모든 데이터가 있습니다. 그러나 현재 NSFetchedResultsController에 업데이트가 발생하지 않습니다.

테스트 프로젝트를 만들고 here으로 배치했습니다.



는 (; 모든 것이 하나 개의 스레드에서 수행 될 때 그러나 그런 일이 내가 처음에이 놀이에 여러 스레드가 거기로 인해 일어나는 생각했다).

원래의 질문에

나는 NSFetchedResultsController 내 '주'NSManagedObjetContext 기반으로 jQuery과, 채울하도록 설정해야합니다.

백그라운드 스레드에서 여러 객체를 별도의 NSManagedObjectContext로 가져오고 가져 오지만 NSPersistantStoreCoordinator를 주 스레드의 컨텍스트와 공유합니다.

NSManagedObjectContextWillSaveNotification 알림을 받으려면 등록되어 있습니다. 이것들을 얻을 때, 나는 그것들을 메인 쓰레드로 보내고, 그것을 메인 컨텍스트에 전달한다.

디버거를 사용하여이 객체가 들어 와서 실제로 해당 객체가 컨텍스트에 추가되는지 확인할 수 있습니다. 그러나 NSFetchedResultsController가 업데이트되지 않습니다. 주 스레드에서이 모든 작업을 수행하면 작동합니다. 컨트롤러에서 -performFetch :를 호출하면 업데이트가 발생하므로 새 개체가 표시되지 않는 것이 아닙니다.

이 대부분은 상용구 코드이며 다른 스레드로 분할됩니다.

+0

"이 모든 것을 주 스레드에서 수행"하면 주 스레드에서 두 개의 컨텍스트를 만들고 'mergeChangesFromContextDidSaveNotification :'등을 호출 했습니까? – Yuji

+0

아니요, 멀티 스레딩을 비활성화하면 모든 문맥이 한 번 완료됩니다 (이 전에는 잘못된 대답이있었습니다). –

+0

NSFRC에 버그가있는 것으로 확인 되었습니까? –

답변

11

NSFetchedResultsController에서 대리자 콜백을 받고 있습니까? 그렇지 않으면 NSFetchedResultsController 자체의 버그 일 수 있습니다. 나는이 문제를 독립적으로 확인/거부 할 수있는 테스트 프로젝트를 만드는 것이 좋습니다.

별도로 복제 할 수있는 경우;

  1. 나는 그것이
  2. 파일 애플과 레이더를 :)보고 싶어요.

코드를 검토 한 후 알림 관찰자를 NSManagedObjectContextWillSaveNotification에서 NSManagedObjectContextDidSaveNotification으로 변경하십시오. 귀하의 문제를 일으킨 저장이 발생했습니다. 전에 메시지를 보냈습니다.

관련 문제