iOS:删除所有核心数据 Swift

标签 ios swift core-data

对于如何快速删除所有核心数据,我有点困惑。我创建了一个带有 IBAction 链接的按钮。单击按钮时,我有以下内容:

let appDel: foodforteethAppDelegate = UIApplication.sharedApplication().delegate as foodforteethAppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext

然后我弄乱了各种方法来尝试删除所有核心数据内容,但我似乎无法让它工作。我已经使用 removeAll 从存储的数组中删除,但仍然无法从核心数据中删除。我假设我需要某种类型的 for 循环,但不确定如何从请求中实现它。

我尝试应用删除单行的基本原则

func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {

    let appDel: foodforteethAppDelegate = UIApplication.sharedApplication().delegate as foodforteethAppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext

    if editingStyle == UITableViewCellEditingStyle.Delete {

        if let tv = tblTasks {
            context.deleteObject(myList[indexPath!.row] as NSManagedObject)
            myList.removeAtIndex(indexPath!.row)
            tv.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.Fade)
        }

        var error: NSError? = nil
        if !context.save(&error) {
            abort()
        }

    }

}

但是,问题是当我单击一个按钮时,我没有 indexPath 值,而且我还需要遍历所有我似乎无法使用上下文处理的值。

最佳答案

试试这个简单的解决方案:

func deleteAllData(entity: String)
{
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName: entity)
    fetchRequest.returnsObjectsAsFaults = false

    do 
    {
        let results = try managedContext.executeFetchRequest(fetchRequest)
        for managedObject in results
        {
            let managedObjectData:NSManagedObject = managedObject as! NSManagedObject
            managedContext.deleteObject(managedObjectData)
        }
    } catch let error as NSError {
        print("Detele all data in \(entity) error : \(error) \(error.userInfo)")
    }
}

swift 4

func deleteAllData(_ entity:String) {
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entity)
    fetchRequest.returnsObjectsAsFaults = false
    do {
        let results = try dataController.viewContext.fetch(fetchRequest)
        for object in results {
            guard let objectData = object as? NSManagedObject else {continue}
            dataController.viewContext.delete(objectData)
        }
    } catch let error {
        print("Detele all data in \(entity) error :", error)
    }
}

实现:

 self.deleteAllData("your_entityName")

关于iOS:删除所有核心数据 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24658641/

相关文章:

ios - 是否可以快速获取颜色名称

Swift:在运行时在非可选中检测到意外的 nil 值:强制转换为可选失败

iOS15 : NSPersistentCloudKitContainer: how to un-share objects?

swift - 在两个 View Controller 之间传递一个巨大的二维数组

ios - uipageViewController 没有加载 y=0 的 View

ios - Kinvey:由于错误而未保存对象:无法映射 'X' ,一个不存在的属性

ios - Sqlite 文件位置核心数据

背景/前景转换后 iOS 动画停止

ios - 在 'managedObjectStore' 类型的对象上找不到属性 'RKObjectManager'

ios - 拖入自定义分段控件时意外调用cancelTracking