내 데이터 소스로 NSFetchedResultsController가 있는데 내 사용자 지정 UITableViewController에 NSFetchedResultsControllerDelegate를 구현합니다. sectionNameKeyPath를 사용하여 결과 세트를 여러 섹션으로 나누었습니다.NSFetchedResultsController로 섹션 삽입을 처리하는 방법은 무엇입니까?
내 방법 중 하나에서 컨텍스트에 몇 가지 개체를 추가합니다.이 개체는 모두 새로운 섹션에 있습니다. 개체를 저장하는 순간에 대리자 메서드가 제대로 호출됩니다. 이벤트의 순서 :
Serious application error. Exception was caught during Core Data change processing:
[NSCFArray objectAtIndex:]: index (5) beyond bounds (1) with userInfo (null)
테이블 업데이트가 일부에서 NSFetchedResultsController 데이터와 동기화되지 않은 것으로 보인다 :
// -controllerWillChangeContent: fires
[self.tableView beginUpdates]; // I do this
// -controller:didChangeSection:atIndex:forChangeType: fires for section insert
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]];
// -controller:didChangeObject:atIndexPath:forChangeType:newIndexPath fires many times
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITavleViewRowAnimationFade]; // for each cell
// -controllerDidChangeContent: fires after all of the inserts
[self.tableView endUpdates]; // <--- Where things go terribly wrong!!!
마지막 호출에는 "EndUpdates 사이는"응용 프로그램이 항상 함께 충돌 길, 그리고 물건은 날아 오른다. NSFetchedResultsControllerDelegate에 대한 문서를 따르고 있지만 작동하지 않습니다. 그것을하는 올바른 방법은 무엇입니까?
업데이트 : 나는이 버그를 보여주는 테스트 프로젝트를 만들었습니다. 당신은 그것을 통해 다운로드 할 수 있습니다 : NSBoom.zip
감사합니다. 그 관찰 (더블 업데이트)은 내가 사용할 수있는 해결 방법을 찾도록 해주었습니다. –