iOS: Delete ALL Core Data Swift

前端 未结 23 747
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-04 11:20

I am a little confused as to how to delete all core data in swift. I have created a button with an IBAction linked. On the click of the button I have the follow

23条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-04 11:41

    This clean() method will fetch entities list from DataModel and clear all data.

    func deleteAll(entityName: String) -> Error? {
                if #available(iOS 9.0, *) {
                    do {
                        let fetchRequest = NSFetchRequest(entityName: entityName)
                        let batchDeleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
                        try context.execute(batchDeleteRequest)
                    } catch {
                        return error
                    }
                    return nil
                } else {
                    let fetchRequest = NSFetchRequest(entityName: entityName)
                    fetchRequest.returnsObjectsAsFaults = false
                    do
                    {
                        let results = try context.fetch(fetchRequest)
                        for managedObject in results
                        {
                            if let managedObjectData:NSManagedObject = managedObject as? NSManagedObject {
                                context.delete(managedObjectData)
                            }
                        }
                    } catch  {
                        return error
                    }
                    return nil
                }
            }
    
            var objectModel: NSManagedObjectModel? {
                if #available(iOS 10.0, *) {
                    return persistentContainer.managedObjectModel
                } else {
                    return persistentStoreCoordinator?.managedObjectModel
                }
            }
    
            open func clean() {
                if let models = objectModel?.entities {
                    for entity in models {
                        if let entityName = entity.name {
                            _ = deleteAll(entityName: entityName)
                        }
                    }
                }
            }
    

    Happy Coding!

提交回复
热议问题