我有一个应用程序,使用Core Data和SQLite商店。
在某些时候,我想删除几个实体的所有对象。可能有近千个物体。
从我通过谷歌和官方文档可以看出,删除对象的唯一方法是[managedObjectContext deleteObject:(Entity *)]
每个对象。但这意味着我必须首先获取所有对象。
数据存储只是sqlite,有没有办法简单地将TRUNCATE TABLE ZENTITY;
传递给它?
答案 0 :(得分:9)
如果将对象与父实体关联,只需删除父对象即可。如果您的父母删除规则设置为“级联”,则所有这些(1k)儿童也将被删除。
约翰
答案 1 :(得分:4)
问题是CoreData不仅仅是一个SQLite包装器。它是一个对象图管理解决方案,除了其他东西之外,它还将对象的缓存版本存储在内存中。据我所知,要删除给定托管对象的所有实例,您必须获取它们然后删除每个。这并不是说这个功能不应该存在,因为它可能应该存在。
答案 2 :(得分:0)
您是否真的尝试过并发现它是性能问题?如果是这样,那么您可以提供一些信息来显示,更重要的是提交一份错误报告。如果没有,那你为什么还要问?
这并不像执行TRUNCATE TABLE ZENTITY;
那么简单,因为Core Data还必须为每个对象(以及其他操作)应用删除规则,这意味着要进行提取。所以他们也可以让你进行获取,然后逐个将结果传递给上下文。