代码之家  ›  专栏  ›  技术社区  ›  Prody

CocoaTouch,核心数据:如何删除实体的所有对象?

  •  2
  • Prody  · 技术社区  · 16 年前

    我有一个应用,使用核心数据和一个sqlite存储。

    在某个时候,我想删除一些实体的所有对象。可能有近千个物体。

    从我通过谷歌和官方文档可以看出,删除对象的唯一方法是 [managedObjectContext deleteObject:(Entity *)] 对于每一个物体。但这意味着我必须首先获取所有对象。

    数据存储只是sqlite,没有办法简单地传递 TRUNCATE TABLE ZENTITY; 去吗?

    3 回复  |  直到 11 年前
        1
  •  4
  •   Ben Lachman    16 年前

    问题是coredata不仅仅是一个sqlite包装器。它是一个对象图形管理解决方案,它将对象的缓存版本存储在内存中以及其他内容。据我所知,要删除给定托管对象的所有实例,您必须先获取这些实例,然后删除每个实例。这并不是说这个功能不应该存在,因为它可能应该存在。

        2
  •  9
  •   John Bond    16 年前

    如果将对象与父实体关联,只需删除父实体即可。如果您的父级删除规则设置为“层叠”,那么所有这些(1K)子级也将被删除。

    约翰

        3
  •  0
  •   Mike Abdullah    16 年前

    你真的试过了,发现这是性能问题吗?如果是这样的话,那么您可以提供一些显示这一点的信息,更重要的是,对其提交一个bug报告。如果没有,那你为什么要问?

    这不像做一个 TRUNCATE TABLE ZENTITY; 因为核心数据还必须为每个对象应用删除规则(以及其他操作),这意味着要执行一个提取。因此,它们还可以让您进行提取,然后逐个将结果传递到上下文中。