如何在 swift 3 中从核心数据中删除对象

Posted

技术标签:

【中文标题】如何在 swift 3 中从核心数据中删除对象【英文标题】:How can I delete object from core data in swift 3 【发布时间】:2016-11-23 04:41:04 【问题描述】:

这就是我将数据保存到核心的方式,现在我想从整个数据中删除特定对象。我该怎么做? 这就是我保存数据的方式:

func saveProductDetails(product : Product) 
        // set user_id 
        product.user_id = UserDefaults.sharedInstace.getCustomerId()
        //save data locally for the time been
        let entity = NSEntityDescription.entityForName("Product", inManagedObjectContext: self.writeContext)
        let category = NSEntityDescription.entityForName("Category", inManagedObjectContext: self.writeContext)
        let brand = NSEntityDescription.entityForName("Brand", inManagedObjectContext: self.writeContext)

        var entityProduct = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:self.writeContext)
        var entityCategory = NSManagedObject(entity: category!, insertIntoManagedObjectContext:self.writeContext)
        var entityBrand = NSManagedObject(entity: brand!,insertIntoManagedObjectContext: self.writeContext)

        entityProduct = product.settingManagedObject(entityProduct)
        entityProduct.setValue(String(Utill.sharedInstace.getTimeStamp()), forKey: "time_stamp")
        entityProduct.setValue(Constant.Status.STATUS_NOT_VERIFIED, forKey: "status")


        if product.categoryObject != nil
            product.categoryObject.user_id = UserDefaults.sharedInstace.getCustomerId();
            entityCategory = product.categoryObject.settingManagedObject(entityCategory)
        

        if product.brandObject != nil
            product.brandObject.user_id = UserDefaults.sharedInstace.getCustomerId();
          entityBrand = product.brandObject.settingManagedObject(entityBrand)
        

        entityProduct.setValue(entityCategory, forKey:"category")
        entityProduct.setValue(entityBrand, forKey: "brand")

        writeContext.performBlock 
            do 

                try self.writeContext.save()

                self.managedContext.performBlock(
                    do
                        try self.managedContext.save()
                     catch let error as NSError  
                        print("Could not save \(error), \(error.userInfo)")
                    

                )
             catch let error as NSError  
                print("Could not save \(error), \(error.userInfo)")
                return
            

        

    

这个Product 对象与另外两个对象有关系,我只想删除特定对象,而不是全部。这意味着删除(product.purchase_id == "selected_purchse_id"),在UITableView。 该怎么做?

【问题讨论】:

【参考方案1】:

检查此代码以进行 swift 3 核心数据操作

import CoreData

class CoreDataOperations: NSObject 

    // MARK: Save data
    func saveData() -> Void 
        let managedObjectContext = getContext()
        let personData = NSEntityDescription.insertNewObject(forEntityName: "Person", into: managedObjectContext) as! Person
        personData.name = "Raj"
        personData.city = "AnyXYZ"

        do 
            try managedObjectContext.save()
            print("saved!")
         catch let error as NSError  
            print("Could not save \(error), \(error.userInfo)")
         catch 

        

    

    // MARK: Fetching Data
    func fetchData() -> Void 

        let moc = getContext()
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")

        do 
            let fetchedPerson = try moc.fetch(fetchRequest) as! [Person]

            print(fetchedPerson.count)
            for object in fetchedPerson 
                print(object.name!)
            

         catch 
            fatalError("Failed to fetch employees: \(error)")
        

    



    // MARK: Delete Data Records

    func deleteRecords() -> Void 
        let moc = getContext()
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")

         let result = try? moc.fetch(fetchRequest)
            let resultData = result as! [Person]

            for object in resultData 
                moc.delete(object)
            

            do 
                try moc.save()
                print("saved!")
             catch let error as NSError  
                print("Could not save \(error), \(error.userInfo)")
             catch 

            





    

    // MARK: Update Data
    func updateRecords() -> Void 
        let moc = getContext()

        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")

        let result = try? moc.fetch(fetchRequest)

            let resultData = result as! [Person]
            for object in resultData 
                object.name! = "\(object.name!) Joshi"
                print(object.name!)
            
            do
                try moc.save()
                print("saved")
            catch let error as NSError 
                print("Could not save \(error), \(error.userInfo)")
            


    

    // MARK: Get Context

    func getContext () -> NSManagedObjectContext 
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        return appDelegate.persistentContainer.viewContext
    

您可以从https://github.com/rajkumar24u/CoreDataOperations获得更多信息

【讨论】:

以上是关于如何在 swift 3 中从核心数据中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS Swift 3中从键盘中删除更改语言键按钮

如何在 Swift 中从 Core Data 中删除数据时删除 UITableView 行?

SWIFT 的核心数据:如何从关系实体中删除对象?

如何在 Swift 中从数据库中保存和获取一个对象?

如何从核心数据swift中删除项目3

如何在 Swift 中从 CloudKit 中删除资产?