我有一个应用程序,它使用表视图来显示我的核心数据的项目列表。我正在使用远程API,并且在下拉表视图后更新我的内容 - 这会触发对API的调用。NSFetchedResultsController委托异常
数据被检索,解析并插入/更新到我的核心数据中。
我是有时在保存我的Core Data上下文后出现错误......请注意,我没有为此使用多线程,就像我说过似乎并不总是发生。
我真的很生气。看来这家伙也有类似的问题,但我仍然无法修复矿用他的解决方案: CoreData error driving me crazy... CoreData: Serious application error. An exception caught from delegate of NSFetchedResultsController
以下是完整的错误:
2012-07-31 14:14:47.332 MyApp[2893:11303]
*** Assertion failure in -[_UITableViewUpdateSupport _setupAnimationsForNewlyInsertedCells],
/SourceCache/UIKit_Sim/UIKit-1914.84/UITableViewSupport.m:1133
2012-07-31 14:14:47.332 MyApp[2893:11303] CoreData: error: Serious application error.
An exception was caught from the delegate of NSFetchedResultsController during a call to -
controllerDidChangeContent:.
Attempt to create two animations for cell with userInfo (null)
UPDATE:
我有我的提取请求上的谓词。为了似乎删除以前从API下载的对象,以及从新的JSON结果中缺少的对象。我设置了一个hideFromUser标志,它保存在我的核心数据中。
如果此标志为YES,那么它不会出现在表格视图中。但如果没关系,那么它确实如此。如果有任何改变,我也会更新那个被管理对象的信息。是否有可能我有一个以前被设置为隐藏的对象,现在设置为显示,并且它也有一些新的数据,这可能触发“单元格应该更新”和“单元格应该插入”?
更多我认为它少似乎是相关的。
这里是我如何更新我的数据:
1)我设置了相应类型的所有相关对象“隐藏形式的用户”(NSPredicate确保他们不表视图显示)。
2)我从JSON数据中得到一个NSArray。
3)循环每个项目,我的createABookOfClass:withJSON:方法查询书籍的核心数据(使用来自json字典的ID),如果找不到它,它会创建一个新的。注意:此时“隐藏用户标志”被恢复。
4)毕竟完成后,我保存。
[[DPLocalStore getInstance] hideFlagItemsOfType:NSStringFromClass([MyFavouriteBook class])];
NSArray * itemsJSON = [data mutableObjectFromJSONData];
[itemsJSON enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL *stop) {
[[DPLocalStore getInstance] createABookOfClass:[MyFavouriteBook class]
withJSON:obj];
}];
NSError *error = nil;
BOOL didsave = [[DPLocalStore getInstance] save:&error];
也许正在发生的事情是含有细胞对象A已经更新,它更新:隐藏标志已更改。因此,我要进入其中NSFetchedResultsController的委托想更新细胞,并将其删除也......自谓现在不对应于该对象的情况......那声音很可能...
你可以发布您插入/更新数据的代码? – 2012-07-31 20:00:55
这真的只是简单的解析JSON阵列并创建了一堆nsmanagedobjects的,在循环之后我保存上下文。这里没有什么特别的。也许如果我让你访问我的BitBucket回购?也许这两个动画为一个单元格...我只是有一个想法,请检查我更新的问题。谢谢。 – Daniel 2012-07-31 21:32:48
Het Martin,我应该发布一些像你说的更多的代码,查看我的答案。干杯。 – Daniel 2012-08-01 18:05:02