swift - 当persistentContainer不在App委托方法中时如何从核心数据中删除所有数据
Posted
技术标签:
【中文标题】swift - 当persistentContainer不在App委托方法中时如何从核心数据中删除所有数据【英文标题】:How to delete all data from core data when persistentContainer is not in App delegate method in swift 【发布时间】:2020-05-30 12:13:42 【问题描述】:我是 Swift 新手,我想从核心数据中删除所有数据。我见过几个例子,但在所有例子中persistentContainer
在AppDelegate
中,而在我的例子中persistentContainer
不在AppDelegate
中。它在不同的类中,如下所示:
class CoreDataStack: NSObject
static let sharedInstance = CoreDataStack()
private override init()
func applicationDocumentsDirectory()
if let url = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).last
print(url.absoluteString)
lazy var persistentContainer: NSPersistentContainer =
let container = NSPersistentContainer(name: "Database")
container.loadPersistentStores(completionHandler: (storeDescription, error) in
if let error = error as NSError?
fatalError("Unresolved error \(error), \(error.userInfo)")
print(storeDescription)
)
return container
()
// MARK: - Core Data Saving support
func saveContext ()
let context = persistentContainer.viewContext
if context.hasChanges
do
try context.save()
catch
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
在 AppDelegate 方法中,我只是将其称为
CoreDataStack.sharedInstance.applicationDocumentsDirectory()
func applicationWillTerminate(_ application: UIApplication)
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
CoreDataStack.sharedInstance.saveContext()
我尝试了this code,但它对我不起作用。
【问题讨论】:
【参考方案1】:其中一种解决方案是对 persistentContainer 中的所有实体使用NSBatchDeleteRequest
。您可以将这些方法添加到您的CoreDataStack
:
func deleteAllEntities()
let entities = persistentContainer.managedObjectModel.entities
for entity in entities
delete(entityName: entity.name!)
func delete(entityName: String)
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do
try persistentContainer.viewContext.execute(deleteRequest)
catch let error as NSError
debugPrint(error)
整个代码可以在here找到
【讨论】:
这个怎么用? 显示使用未解析标识符“managedObjectModel”使用未解析标识符“persistentStoreCoordinator” 显示此错误“NSPersistentContainer”类型的值没有成员“执行” 如何在需要的地方调用这个方法。以及如何在其中传递实体名称 您可以从项目中的任何位置调用它:CoreDataStack.sharedInstance.deleteAllEntities()
以上是关于swift - 当persistentContainer不在App委托方法中时如何从核心数据中删除所有数据的主要内容,如果未能解决你的问题,请参考以下文章
Swift:仅当键盘隐藏 TextField 或 Button 时滚动视图
当 newValue 没有分配任何内容时,为啥这个 swift 代码可以工作?
不...当 UIButton (Swift) 中的文本太长时