如何清除 NSManagedObjectContext 中的所有对象?

Posted

技术标签:

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

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

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

(void)deleteObject:(NSManagedObject *)object

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

【问题讨论】:

【参考方案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()
    

【讨论】:

以上是关于如何清除 NSManagedObjectContext 中的所有对象?的主要内容,如果未能解决你的问题,请参考以下文章

这个 NSFetchRequest 有啥问题?

android 清除缓存功能如何实现

在 swift 3 中获取相关表

如何在 Skype 清除所有对话记录

Echarts如何清除上一次加载的数据

如何清除MySQL复制