문제

다음 단계는 nsfetchedResultsController에서 충돌을 일으 킵니다.

  1. NSFetchEdResultsController Backed TableView에 첫 번째 요소를 추가하려고합니다.
  2. 임시 MO 객체를 만들고 새로운 객체를 추가하기 위해 모달 뷰 창을 표시합니다.
  3. 추가 시트 (Modal View Controller)에서 취소 버튼을 눌러 새 요소를 폐기합니다.
  4. 취소 버튼의 CalcelAction Callback에서 생성 된 새 임시 객체를 삭제합니다.
  5. 여기까지의 코드는 핵심 데이터에 대한 Apple 샘플 코드와 정확히 유사합니다. 내가 가진 유일한 추가 코드는 추가 시트가 기각 된 후 [TableView ReloadData]에 대한 호출입니다.
  6. 충돌은 NSFetchedResultsController의 잘못된 섹션 수와 관련이 있기 때문에 첫 번째 요소를 추가하려고 시도한 경우에만 발생합니다.

이로 인해 아래에 충돌이 발생합니다. ReloadData를 위해 중복 호출을 제거하면 충돌이 보이지 않습니다. 레시피 샘플 코드 데이터에 ReloadData 호출을 추가하면 충돌도 발생합니다.

nsfetchedResultsController에서 알려진 문제입니까?

2009-09-13 18 : 22 : 45.600 레시피 [14926 : 20B * 끊임없는 예외 'nsRangeException'으로 인한 앱 종료, 이유 : '* -[NSCFARRAY ObjectAtIndex :] : INDEX (0) BOONT BOUND (0) '

도움이 되었습니까?

해결책

직접 발견 한대로 NSFetchedResultsController Delegate Methods를 사용하고 있기 때문에 [TableView ReloadData]를 사용해서는 안됩니다.

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

이 방법은 실제로 객체를 추가, 삭제 또는 수정할 때 테이블보기를 업데이트하는 것을 담당합니다. 따라서 [TableView ReloadData]에 호출을 추가하면 두 개의 다른 스레드가 테이블보기에 액세스/수정하는 것이 발생합니다. 이로 인해 발생하는 충돌이 발생합니다.

대의원 메소드를 사용하지 않는 경우 충돌은 코드의 다른 것에 의한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top