我有清除所有對象從特定實體的功能,在SWIFT 2:核心數據:如何在swift 3中編寫「通用」讀取/刪除函數?
private static func clearTable(tableName : String)
{
let appDel = UIApplication.sharedApplication().delegate as! AppDelegate
let context : NSManagedObjectContext = appDel.managedObjectContext
let request = appDel.persistentStoreCoordinator
let fetchRequest = NSFetchRequest(entityName: tableName)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try request.executeRequest(deleteRequest, withContext: context)
} catch let error as NSError {
debugPrint(error)
}
}
最近我遷移到SWIFT 3,現在它看起來像這樣:
static func clearTable(_ tableName : String)
{
let appDel = UIApplication.shared.delegate as! AppDelegate
//let context : NSManagedObjectContext = appDel.managedObjectContext
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let request = NSFetchRequest(entityName: tableName)
let fetchRequest: NSFetchRequest = NSFetchRequest(entityName: tableName)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: NSFetchRequest(entityName: tableName))
do {
try request.execute(deleteRequest, with: context)
} catch let error as NSError {
debugPrint(error)
}
}
我的理解,現在我要聲明request
和fetchRequest
像
let fetchRequest: NSFetchRequest<SomeEntity> = NSFetchRequest(entityName: "SomeEntity")
的問題是,我不知道實體之前手。 swift 3中有任何解決方法或反思嗎?而且我對swift和核心數據很陌生,這是獲取或刪除對象的正常方式嗎?
由於代碼重複,您的代碼有點令人困惑。你實例化相同的'NSFetchRequest' 3x。查看我的答案以獲得備用解決方案。 –