Swift 核心数据删除
在一个应用程序上工作,当任何用户登录时,一些核心数据存储应该被删除-以前的用户应该从数据库中删除。使用删除实体的组合Swift 核心数据删除,swift,core-data,Swift,Core Data,在一个应用程序上工作,当任何用户登录时,一些核心数据存储应该被删除-以前的用户应该从数据库中删除。使用删除实体的组合 func deleteEntity(_ entity : String) { let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entity) fetchRequest.includesPropertyValues = false do
func deleteEntity(_ entity : String) {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entity)
fetchRequest.includesPropertyValues = false
do {
let results = try self.context.fetch(fetchRequest)
for managedObject in results {
let managedObjectData : NSManagedObject = managedObject as! NSManagedObject
self.context.delete(managedObjectData)
}
try self.context.save()
} catch let error {
print(error)
}
}
也许您需要在上下文中调用
reset()
?但是“登录”到某个外部服务器是什么意思?是的,在从外部服务器插入新数据之前,数据被/应该被删除。reset()
调用可以解决问题,如果没有它,self.context.registeredObjects.count
将在删除文件后返回非零值,但是,fetch
似乎不返回任何对象?
fileprivate func deleteStore(_ storeName: String) {
self.context.performAndWait { [weak self] () -> Void in
guard let stores = self?.context.persistentStoreCoordinator?.persistentStores else {return }
guard let appDelegate = self?.appDelegate else {return }
for store in stores {
if storeName == store.sqliteStoreName {
do {
// try self?.context.persistentStoreCoordinator?.remove(store)
try self?.context.persistentStoreCoordinator?.destroyPersistentStore(at: store.url!, ofType: NSSQLiteStoreType, options: nil)
try FileManager.default.removeItem(at: store.url!)
try FileManager.default.removeItem(at: store.walFileURL as URL)
try FileManager.default.removeItem(at: store.shmFileURL as URL)
if appDelegate.shouldUseInMemoryStores {
try self?.context.persistentStoreCoordinator?.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: store.url!, options: nil)
} else {
try self?.context.persistentStoreCoordinator?.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: store.url!, options: appDelegate.coreDataStoreOptions)
}
} catch let error as NSError {
DDLogError("caught error: \(error)")
}
}
}
}