在loadPersistentStores
上使用“新” iOS 10核心数据设置时,如何重置/删除所有内容?我想避免使用实体名称,但希望使用类似destroyPersistentStore
的东西。
我将堆栈设置如下:
persistentContainer = NSPersistentContainer(name: "CoreData", managedObjectModel: mom)
let storeDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = storeDirectory.appendingPathComponent("CoreData.sqlite")
let description = NSPersistentStoreDescription(url: url)
description.shouldInferMappingModelAutomatically = true
description.shouldMigrateStoreAutomatically = true
persistentContainer.persistentStoreDescriptions = [description]
persistentContainer.loadPersistentStores(completionHandler: { (_, error) in
guard let error = error as NSError? else { return }
fatalError("Unresolved error: \(error), \(error.userInfo)")
})
persistentContainer.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
persistentContainer.viewContext.undoManager = nil
persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
我只发现了例如我需要知道所有实体名称的BatchDeleteRequests,但是我想要更通用的东西并重置所有内容-当用户注销时,我需要最高效/最安全的方法。
答案 0 :(得分:0)
此建议执行以下步骤
persistentStoreCoordinator
代码假定iOS 10+ NSPersistentContainer
API的标准实现,并在AppDelegate和SQLite存储中具有persistentStoreCoordinator
和managedObjectContext
属性。
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let persistentStoreCoordinator = appDelegate.persistentContainer.persistentStoreCoordinator
let currentStore = persistentStoreCoordinator.persistentStores.last!
let currentStoreURL = currentStore.url!
appDelegate.managedObjectContext.reset()
do {
try persistentStoreCoordinator.destroyPersistentStore(at: currentStoreURL, ofType: NSSQLiteStoreType)
try persistentStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: currentStoreURL)
} catch {
print(error)
}
在iOS中,我建议立即添加一个新商店,因为通常应用程序不会终止,因此不会重新创建持久性容器。