nsfetchresultcontroller 在删除后返回行

Posted

技术标签:

【中文标题】nsfetchresultcontroller 在删除后返回行【英文标题】:nsfetchresultcontroller returns rows after delete 【发布时间】:2013-07-23 08:15:42 【问题描述】:

我将父/子上下文用于核心数据。对象被添加到后台线程和上下文中。效果很好。对象也会在后台上下文中删除并保存在子/父上。我可以看到在核心数据调试中,对象被删除并成功提交。之后,我告诉 nsfetchresultcontroller(设置为 nil 并重新初始化和删除缓存)来获取对象。即使对象被删除,对象仍然存在。

CoreData: sql: COMMIT
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: INSERT INTO ZTLOG(Z_PK, Z_ENT, Z_OPT, ZFXY, ZFXYZ) VALUES(?, ?, ?, ?, ?)
CoreData: sql: COMMIT

删除

CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: DELETE FROM ZTLOG WHERE Z_PK = ? AND Z_OPT = ?
CoreData: sql: COMMIT

nsfetchresult 控制器

CoreData: annotation: fetch using NSSQLiteStatement <0x68a2760> on entity 'TLog' with sql text 'SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZXY, t0.ZXYZ WHERE  t0.Z_PK = ? ' returned 0 rows
CoreData: annotation: total fetch execution time: 0.0080s for 0 rows.
CoreData: annotation: fault fulfilled from database for : 0x687ab40 <x-coredata://BCA24D29-F9D3-4068-8122-E7A43C116D8A/TLog/p2>

所以即使我将 fetchcontroller 和委托设置为 nil 并重新初始化,表视图仍然有对象。但 fetchresult 控制器 fetchedobjects 仍然删除了对象。 最后一个日志行看起来很可疑。我删除了所有对象。为什么它完成了错误?

有人知道吗?

【问题讨论】:

【参考方案1】:

又是线程问题。核心数据对象不是线程安全的!

【讨论】:

以上是关于nsfetchresultcontroller 在删除后返回行的主要内容,如果未能解决你的问题,请参考以下文章

带有 NSFetchResultController 的 CoreData:使用 fetchObjects 中的属性进行的无效更新

如何停止在 NSFetchedResultsController 中重新排序?

如何在后台线程中从 NSFetchedResultsController 加载大数据

NSFetchedResultsController 用于在 Apple Watch 上显示记录?

NSFetchedResultsController performFetch 不起作用

核心数据中的触发器