したがって、私はこのことをほとんど理解していますが、テーブルを検索した後に入力された詳細ビューから managedObjectContext を更新すると、NSFetchedResultsChangeUpdate につまずいています。
コア データ セットから生成されたテーブルビューがあります。このテーブルから詳細ビューに入り、問題なく変更を加えることができます。また、テーブルを検索して、ほとんどの場合問題なく変更を加えることができます。ただし、特定のオブジェクトでは、「コア データの変更処理中に例外がキャッチされました」というメッセージが表示されます。
これを NSFetchedResultsChangeUpdate まで追跡しました。私は次のコードを使用しています:
case NSFetchedResultsChangeUpdate:
if (searchTermForSegue)
{
NSLog(@"index info:%@.....",theIndexPath);
NSLog(@"crashing at the next line");
[self fetchedResultsController:self.searchFetchedResultsController configureCell:[tableView cellForRowAtIndexPath:theIndexPath] atIndexPath:theIndexPath];
break;
} else {
[self fetchedResultsController:controller configureCell:[tableView cellForRowAtIndexPath:theIndexPath] atIndexPath:theIndexPath]; }
break;
テーブルが検索されていないときは、else メソッドが実行され、100% の確率で機能します。テーブルが検索されると、if (searchTermForSegue) が実行され、ほとんどの場合は機能しますが、常に機能するとは限りません。私は theIndexPath をログに記録し、次のことを発見しました。
機能する場合、theIndexPath はオブジェクト indexPat を正しく報告しています。失敗した場合、間違った theIndexPath が呼び出されています。たとえば、tableView を 3 つのセクションに絞り込む検索を実行すると、1 番目に 2 項目、2 番目に 1 項目、3 番目に 1 項目、次の nslog が得られます。
On first object: index info:<NSIndexPath 0xb0634d0> 2 indexes [0, 0].....
on second object: index info:<NSIndexPath 0xb063e70> 2 indexes [0, 1].....
on third object: index info:<NSIndexPath 0xb042880> 2 indexes [1, 0].....
but on the last object: index info:<NSIndexPath 0x9665790> 2 indexes [2, 17].....
[2, 0] を呼び出す必要があります
これらのオブジェクトを削除したり、新しいオブジェクトを追加したりするのではなく、単純にこれらのオブジェクトを更新していることに注意してください。
どんな考えでも大歓迎です!