【问题标题】:How to clear all objects in NSManagedObjectContext?如何清除 NSManagedObjectContext 中的所有对象?
【发布时间】:2011-01-02 08:39:59
【问题描述】:

在NSManagedObjectContext中添加或删除单个对象是可以的,只是想知道为什么NSManagedObjectContext中没有API可以一次性清除所有对象?

指定在提交更改时应从其持久存储中删除的对象。

  • (void)deleteObject:(NSManagedObject *)object

为什么没有clearAllObjects等API一次性删除所有对象?

【问题讨论】:

    标签: core-data nsmanagedobjectcontext


    【解决方案1】:

    是的,使用 deleteObject: 方法可以做到这一点。如果您想删除所有对象,那么销毁托管对象上下文、删除或更改您的持久存储并重新创建您的核心数据堆栈可能会更快

    【讨论】:

    • 指定在提交更改时应从其持久存储中删除的对象。 - (void)deleteObject:(NSManagedObject *)object
    • 您可以在所需的上下文中搜索不同的实体,然后将它们标记为删除。我知道很糟糕,但它是对象持久化框架,而不是数据库抽象。
    【解决方案2】:

    这可能是一种通过一次调用即可获得所需结果的简单方法。它确实需要多个fetchdelete 请求,但您不需要手动列出每个实体名称。

    extension NSManagedObjectContext {
        func clearAll() {
            persistentStoreCoordinator?.managedObjectModel.entities.compactMap({ $0.name }).forEach { entity in
                let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: entity)
                try? fetch(fetchRequest).forEach({ delete($0) })
            }
            try? save()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2011-05-18
      • 1970-01-01
      • 2016-12-22
      • 2011-11-10
      相关资源
      最近更新 更多