2013-08-29 3 views
1

병합 후 다시로드되지 않습니다. 내보기 컨트롤러에서 NSFetchedesultsController 데이터 원본으로 사용하는 테이블 뷰가 있습니다. 그리고 백그라운드 스레드에서 다른 NSManagedContext 인스턴스를 사용하여 서버에서 데이터를로드해야합니다. 배경 컨텍스트 전경 컨텍스트 병합 한 후에 테이블 뷰에 변경 내용을 반영하여 NSFetchedResultsController을 다시 설정해야합니다 (새로 도착한 데이터를 다시 가져 오도록). 그런 다음 테이블 뷰를 다시로드하십시오.UITableView 데이터 원본 병합 후 배경 NSManagedObjectContext

내 테이블보기가 몇 초 후 (때로는 훨씬 길어질 때까지) 다시로드되지 않는 것 같습니다. 테이블 뷰를 스크롤 할 때 새로운 데이터가 즉각적으로 나타나기 때문에 인출 때문이 아니라고 확신합니다.

제안 사항이 문제를 해결하는 방법은 무엇입니까?

미리 감사드립니다.

답변

1

알림 콜백 함수가 호출되는 위치를 알지 못하는 결과를 초래했습니다. NSManagedObjectContextDidSaveNotification 콜백 함수에서 테이블보기를 다시로드합니다. 내가이 함수에서 어떤 스레드인지 확인하면이 스레드가 내가 추측 한 주 스레드가 아닌 다른 스레드에서 실행된다는 것을 알게되었습니다. 그래서 GCD를 사용하여 주 스레드와 문제를 해결합니다.

1

데이터를 가져 오는 한 후 다음이 imediately backgrond에 컨텍스트를 저장해야하는 객체를 관리 만들 이러한 개체는 부모 컨텍스트에 병합 될 것입니다, 당신은 부모 컨텍스트에 대한 모든 변경 사항을 다시 한 번 확인 할 수 [컨텍스트 hasChange] [컨텍스트 updatedObjects] [ context inserted objects] 저장된 개체가 여전히 메모리에 남아 있습니다. 배경을 재설정해야합니다. 컨텍스트를 지우십시오.

0

저장 작업은 하위 컨텍스트의 개인 대기열에서 수행되어야하므로 알림을 듣지 않아도되므로 중첩 된 블록은 모든 작업을 완료하고 다시 가져올 때까지 대기합니다.

관련 문제