可以在 NSManagedObjectContext 中添加或删除单个对象,只是想知道为什么 NSManagedObjectContext 中没有 API 可以一次清除所有对象?
指定在提交更改时应从其持久存储中删除的对象。
- (void)deleteObject:(NSManagedObject *)object
为什么没有 clearAllObjects 等 API 一次性删除所有对象?
可以在 NSManagedObjectContext 中添加或删除单个对象,只是想知道为什么 NSManagedObjectContext 中没有 API 可以一次清除所有对象?
指定在提交更改时应从其持久存储中删除的对象。
- (void)deleteObject:(NSManagedObject *)object
为什么没有 clearAllObjects 等 API 一次性删除所有对象?
是的,使用 deleteObject: 方法这样做很好。如果您想删除所有对象,可能会更快地销毁您的托管对象上下文,删除或更改您的现有存储并重新创建您的核心数据堆栈
这可能是一种通过一次调用即可获得所需结果的简单方法。它确实需要多个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()
}
}