【问题标题】:How To Delete all Entity Objects in CoreData Swift 3如何在 CoreData Swift 3 中删除所有实体对象
【发布时间】:2017-04-24 20:42:02
【问题描述】:

所以我有这段代码可以正常工作,但我想要一个更好的代码。

func deleteCoreDataObjects() {
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    //where groupData is an Array of an Entity
    for i in 0..<self.groupData.count {
        context.delete(groupData[i])
    }


    (UIApplication.shared.delegate as! AppDelegate).saveContext()

}

目前我正在通过for循环一一删除对象。

【问题讨论】:

    标签: swift xcode core-data swift3 xcode8


    【解决方案1】:

    你可以试试这个:

    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)")
        }
    }
    

    用法:

    self.deleteAllData("your_entityName")
    

    已经出现在:https://stackoverflow.com/a/33931528/2894160

    【讨论】:

      【解决方案2】:

      这是从 Core Data 中删除记录的代码: //从本地数据库中删除用户信息

      func deleteUserInfo()  {
      
          let context = appdelegate.managedObjectContext
          let coord   = appdelegate.persistentStoreCoordinator
      
          let fetchRequest = NSFetchRequest(entityName: "User")
          if #available(iOS 9.0, *) {
              let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
              //let predicate = NSPredicate(format: "id == %@", key)
              //fetchRequest.predicate = predicate
              do {
                  try coord.executeRequest(deleteRequest, withContext: context)
              }
              catch let error as NSError {
                  //Error handling
              }
              catch {}
          } else {
              // Fallback on earlier versions
      
              do {
              let users: NSArray = try appdelegate.managedObjectContext.executeFetchRequest(fetchRequest)
      
              for user in users {
                  appdelegate.managedObjectContext.delete(user)
              }
      
              try appdelegate.managedObjectContext.save()
      
              } catch let error as NSError {
                  //Error handling
              }
              catch {}
          }
      }
      

      【讨论】:

        【解决方案3】:

        最好是删除持久性存储,然后添加新的而不是循环每个实体(如果您想从 coredata 中删除 所有实体)。

        func deletePersistentStoreCoordinator () {

            do {
                let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("YourDatabaseName.sqlite")
                try self.persistentStoreCoordinator.destroyPersistentStoreAtURL(url, withType: NSSQLiteStoreType, options: nil)
                try self.persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
            }
            catch{
        
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-16
          • 2018-10-16
          • 1970-01-01
          相关资源
          最近更新 更多