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 上显示记录?