문제

iPhone Dev에 상당히 새로운. 내 앱은 핵심 데이터를 사용하며, 어느 시점에서 nsfetchedResultsControllerDelegate 메소드에서 일부 데이터를 저장하려고합니다.

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
   atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
  newIndexPath:(NSIndexPath *)newIndexPath {

이 주제에 대한 Apple의 문서 에서이 대부분을 얻을 수 있습니다. 삭제 작업은 다음과 같습니다.

case NSFetchedResultsChangeDelete:
        [managedObjectContext deleteObject:anObject];
        NSError *error;
        if (![managedObjectContext save:&error]) {
            NSLog(@"WTF? %@", [error description]);
        }
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationFade];
        break;

이제이 작업을 수행하면 피할 수없는 충돌 후 해당 물체가 삭제됩니다. 그래서 옳은 일이 일어나고 있습니다. 그러나 충돌은 흥미 롭습니다.

심각한 응용 프로그램 오류. 핵심 데이터 변경 처리 중에 예외가 발생했습니다. 저장 전에 변경중인 변경을 처리하지 못했습니다. 100 번의 시도 후에는 컨텍스트가 여전히 더럽습니다. 일반적 으로이 재귀 더티는 잘못된 검증 방법, -willsave 또는 알림 처리기에 의해 발생합니다. userInfo (null)와 함께

2010-02-09 23 : 02 : 03.931 APP2 [26664 : 207] *** 앱 종료 예외 "NSinternalInconsistencyException ', 이유 :'저장 전에 변경중인 변경을 처리하지 못했습니다. 100 번의 시도 후에는 컨텍스트가 여전히 더럽습니다. 일반적 으로이 재귀 더티는 잘못된 검증 방법, -willsave 또는 알림 처리기에 의해 발생합니다. '

내 연구는 매우 제한된 결과를 얻었습니다. 여기에 이것을 문서화하는 것이 좋습니다. :-) 그러나 내 직감은 MOC가 컨트롤러의 다른 곳에 기록되고 있다고 말하지만, 그런 일이 발생한다는 증거를 찾을 수는 없습니다. ViewDidload 메소드에는 NSFetchEdResultsController가 초기 데이터를 얻는 데 사용되고 있지만 그게 IT입니다.

여기서 무엇이 잘못되었는지에 대한 제안이 있습니까? 평소와 같이, 당신의 커뮤니티 기반 벌집 마음은 대단히 감사합니다!

건배, 아론

도움이 되었습니까?

해결책

(문제를 올바르게 이해하면)이 경우에해야 할 일은 다음과 같습니다.

case NSFetchedResultsChangeDelete:

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationFade];
        break;

그 방법을 기억하십시오

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 

기본 데이터가 변경된 후에 알림을받습니다. 그래서 나는 당신의 객체가 이미 삭제되었다고 생각합니다. 수동으로 삭제할 필요가 없습니다. 이 방법에서 수행해야 할 일은 TableView에서 제거하는 것입니다.

도움이 되었기를 바랍니다!

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