アプリケーション全体(2つのエンティティを含む)に単一の管理対象ドキュメントがあり、ユーザーは2つの異なるViewControllerから更新できます。各ビューコントローラーには、変更を中継するための独自のNSFetchedResultsControllerプロパティがあります。一方のビューコントローラーのUICollectionViewと、もう一方のUITableViewです。ルートビューコントローラーのUICollectionViewにはチームが表示され、セグエビューコントローラーのUITableViewにはそのチームのプレーヤーが表示されます。
最初のViewControllerにいるときは、チームのインスタンスを追加できます。インスタンスをドキュメントに保存してからUICollectionViewに追加すると、正常に機能します。2番目のViewControllerにいるときに、CoreDataにPlayerを挿入して、次のように呼び出します。
[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil];
これにより、NSFetchedResultsControllerDelegateメソッドが正しく呼び出されます。-(void)controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
このデリゲートメソッドでは、次のように呼び出します。
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
ただし、テーブルビューでこの行挿入メソッドを呼び出すと、次のCoreDataエラーが発生します。
"CoreData:エラー:重大なアプリケーションエラー。コアデータの変更処理中に例外がキャッチされました。これは通常、NSManagedObjectContextObjectsDidChangeNotificationのオブザーバー内のバグです。 * -[__ NSPlaceholderArray initWithObjects:count:]:オブジェクト[0]からnilオブジェクトを挿入しようとしていますuserInfo(null) "
私のfetchedResultsControllerは確かにNSManagedObjectContextObjectsDidChangeNotificationのオブザーバーですが、このエラーは管理対象オブジェクトのコンテキストが変更される前に発生しています。したがって、基本的に、管理対象オブジェクトコンテキストがnulluserInfoを取得している時点を特定できません。
(もう1つ発生するのは、UICollectionViewを持つルートビューコントローラーからのNSFetchedResultsControllerが、UITableViewを持つ次のビューコントローラーのNSFetchedResultsControllerが独自の機能を起動する直前にデリゲートメソッドを起動することです。これは正しい機能だと思います。チームとプレーヤーの両方がCoreDataで更新を取得しているため)。
UITableView行の挿入がこのエラーを引き起こしている理由、または単一の管理対象ドキュメントにこれを引き起こす可能性のある不整合がどのように発生する可能性があるかについての考えはありますか?