0
백그라운드 스레드에서 CoreData 데이터를 삭제하고 업데이트하는 다소 일반적인 문제가 있으며 UITableView가 이전에 CoreData 객체 배열을 렌더링하는 동안 수신 : 나는 아마도 그것을 해결하기 위해하지만 맹목적으로 코드를 추가 가기 전에, 내가 먼저 문제를 재현하고자하는 방법을 제안 무리를 읽은CoreData를 재현하는 데 문제가 발생했습니다. '오류가 발생하지 않았습니다.'오류가 발생했습니다.
"NSObjectInaccessibleException CoreData could not fulfill a fault for"
.
내 테스트 케이스에는 3 단계가 있습니다.
- 는 백그라운드 스레드를 생성
- CoreData 에서 항목을 가져옵니다. 새 쓰레드에서는 크래시처럼 데이터베이스를 지우고 다시로드하는 긴 루프 (100 회 반복)를 작성하십시오. 백그라운드 스레드는 새로운 NSManagedObjectContext를 작성하지만 PersistantStore를 기본 컨텍스트와 공유합니다.
- 기본 컨텍스트에서 새 항목을 계속 가져온 후 무한 루프 (> 10,000 반복)로 기본 UI 스레드를 보낸 다음 가져온 개체를 반복합니다. 또한이 테스트를 다시 시도하지 않고 페치 된 객체의 원래 목록을 반복하여 테스트 해 보았습니다.
이 테스트 케이스는 NSObjectInaccessibleException 오류가 발생할 것으로 예상되지만 모든 것이 완벽하게 작동하며 충돌을 재현 할 수 없습니다. 코드를 검토하고이 오류를 재현 할 수없는 상황에서 모든 것을 올바르게 수행하고있는 것처럼 느껴집니다. 그러나 어떻게 든 야생에서이 충돌이 나타납니다.
이 충돌을 어떻게 재현 할 수 있습니까?
좋습니다. 필자는 적어도 한 가지 요인으로 저장되는 레코드 수를 극적으로 늘리려고 노력할 것입니다. – dirkoneill
원본 데이터가 포함 된 UITableVIew를 동시에 다시로드하는 동안 최대 100,000 개의 레코드를 삭제하고 저장했습니다. 나는이 충돌을 재현하는 것처럼 보이지는 않지만 여전히 Crashlytics에 나타납니다. – dirkoneill