如何清除 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】:这可能是一种通过一次调用即可获得所需结果的简单方法。它确实需要多个fetch
和delete
请求,但您不需要手动列出每个实体名称。
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 中的所有对象?的主要内容,如果未能解决你的问题,请参考以下文章