2009-09-13 3 views
1

다음 단계를 수행하면 NSFetchedResultsController에 오류가 발생합니다.NSFetchedResultsController 충돌

  1. NSFetchedResultsController 뒷받침 TableView에 첫 번째 요소를 추가하려고합니다.
  2. 임시 MO 개체를 만들고 새 개체를 추가하는 모달보기 창을 표시합니다.
  3. 시트 추가 (모달 뷰 컨트롤러)에서 취소 버튼을 눌러 새 요소를 버립니다.
  4. 취소 단추의 CancelAction 콜백 단추에서 만든 새 임시 개체를 삭제합니다.
  5. 여기까지의 코드는 Core Data 용 Apple 샘플 코드와 정확히 같습니다. 추가 시트를 닫은 후에 [tableView reloadData]에 대한 호출 만 있으면됩니다.
  6. NSFetchedResultsController의 잘못된 섹션 수와 관련되어 있기 때문에 첫 번째 요소를 추가하려고하면 충돌이 발생합니다.

이로 인해 아래에 오류가 발생합니다. reloadData에 대한 중복 호출을 제거하면 충돌이 표시되지 않습니다. Recipe 샘플 코드 데이터에 reloadData 호출을 추가하면 충돌이 발생합니다.

NSFetchedResultsController의 알려진 문제점입니까? 22 :

2009-09-13 18

45.600 레시피 [14,926 : 20B] * 의한 캐치되지 않는 예외 'NSRangeException'이유 응용 프로그램 종료 '* - [NSCFArray objectAtIndex :] 인덱스 (0)의 경계를 넘어 당신은 자신에 의해 발견로서 당신은 아마도 NSFetchedResultsController 위임 방법을 사용하고 있기 때문에 (0) '

답변

4

, 당신은

– controllerWillChangeContent: 
– controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: 
– controller:didChangeSection:atIndex:forChangeType: 
– controllerDidChangeContent: 

이 방법은 테이블 뷰를 업데이트하는 담당 실제로, [있는 tableView reloadData] 사용하지 말아야합니다 개체를 추가, 삭제 또는 수정할 때 따라서 [tableView reloadData]에 대한 호출을 추가하면 두 가지 스레드가 모두 테이블 뷰에 액세스/수정됩니다. 이것은 당신이 겪고있는 충돌을 일으킨다.

대리자 메서드를 사용하지 않는 경우 충돌은 코드의 다른 것 때문입니다.

+0

NSFetchedResultsController에 대한 대리인을 설정했지만 이러한 기능이 아직 구현되지 않았습니다. 대리인을 제거하면 문제가 사라집니다. 그래서 이것은 행동을 확인합니다. NSFetchedResultsController에 대해 API 문서보다 자세히 설명하는 문서가 있습니까? 나는이 행동이 거기에서 언급 된 것을 보지 못했다. 제게 알려 주시고 모든 도움에 감사드립니다. – siasl

+0

불행히도, 내 지식으로는 API 이외의 다른 문서는 없습니다 (적어도 관찰 된 동작과 관련된 다른 문서는 없습니다). 제가 말한 것은 제 개인적인 경험에 근거합니다. –