所以我几乎已经弄清楚了这件事,但是当我从搜索表后输入的详细视图更新我的 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) 并且大部分时间都有效,但并非总是如此。我记录了 IndexPath 并发现了以下内容:
当它工作时,theIndexPath 正确地报告了对象 indexPat,当它失败时,错误的 theIndexPath 被调用了。例如,如果我将 tableView 缩小为 3 个部分,第一个是 2 个项目,第二个是 1 个,第三个是 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]
请注意,我只是更新这些对象,而不是删除它们或添加新对象。
任何想法将不胜感激!