UITableViewController在删除行上崩溃,因为单元格正在绘制和访问核心数据

时间:2010-10-09 22:42:01

标签: iphone uitableview

我有一个由NSFetchedResultsController支持的UITableViewController。

我在managedObjectContext中保存commitEditingStyle后,在删除行时,我正在遇到SIGABRT。

崩溃然后发生在drawRect:在我的UITableViewCell中,它试图访问此行的核心数据对象:

[self.document.name drawAtPoint:...]

SIGABRT例外是:

<0x7f883f0 DocumentListControllerCell.m:(108)> CoreData could not fulfill a fault 
for '0x7f2a600 <x-coredata://A71C21B4-FE2A-4D1B-A76F-A2AB80E4814C/Document/p16>'

当然问题是CoreData对象已被删除,无法再访问。我想知道为什么仍然会为这个单元调用drawRect

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

同时删除行时,将其从核心数据中删除,以便不会绘制冗余数据。 发生了很多次,我从表中删除了一些东西,但不是从我获取数据的地方,这会使我的应用程序崩溃,因为它会在调用endcommit样式时正确绘制表。 所以只需做出改变,一切都应该没问题 的 PK

答案 1 :(得分:0)

我看到一个解决方案,但我想知道这是否是解决此问题的正确方法。

目前的问题是单元格中的drawRect访问已删除的CoreData“文档”,以获取文档名称并绘制它。我可以将文档名称缓存在setDocument中的字符串中,而不是直接访问此字符串。

这似乎是正确的方法。有人可以确认我不应该访问drawRect中的核心数据对象吗?