在Coredata中删除对象后获取nil

问题描述 投票:0回答:1

我尝试使用 CoreData 存储一些数据。 我创建了实体名称 Users 和一些属性,即年龄、用户名、密码。 加载成功,正在检索。 当我使用

context.delete(user)
删除该实体中的某些对象时,它将被删除,但在我再次检索后显示为零。

Showing nil for deleted object

注意:我编写的谓词代码的格式为“Username!=nil”。 这是正确的方法吗? Core Data 中没有 nil 如何克服?

import UIKit
import CoreData

class CoreDataVC: UIViewController {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    var context:NSManagedObjectContext!

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func addAction(_ sender: Any){
        if let newUser = openDatabse(){
            saveData(UserDBObj:newUser)
        }
        _ = fetchData()
    }

    @IBAction func deleteAction(_ sender: Any){
        if let newUser = openDatabse(){
            deleteData(UserObj: newUser)
        }
        _ = fetchData()
    }

        // MARK: Methods to Open, Store and Fetch data
    func openDatabse() -> NSManagedObject?{
        context = appDelegate.persistentContainer.viewContext
        guard let entity = NSEntityDescription.entity(forEntityName: "Users", in: context) else {
            print("Invalid Entity")
            return nil
        }
        let newUser = NSManagedObject(entity: entity, insertInto: context)
        return newUser
    }

    func deleteData(UserObj: NSManagedObject){
        let result = self.fetchData()
        if let data = result.last{
            context.delete(data)
        }
        do {
            try context.save()
        }
        catch{
            print("Error on saving context")
        }
        _ = fetchData()
    }

    func saveData(UserDBObj:NSManagedObject)
    {
        UserDBObj.setValue("RDC1", forKey: "username")
        UserDBObj.setValue("12341", forKey: "password")
        UserDBObj.setValue("22", forKey: "age")
        
        print("Storing Data..")
        do {
            try context.save()
        } catch {
            print("Storing data Failed")
        }
        _ = fetchData()
    }

    func fetchData() -> [Users]
    {
        var users : [Users] = []
        print("Fetching Data..")
        let request = Users.fetchRequest()
        request.returnsObjectsAsFaults = false
        do {
            let result = try context.fetch(request)
            users = result
            for data in result {//as! [NSManagedObject] {
                print("Username: ",data.username ?? "nil",", Age : ",data.age ?? "nil")
            }
        } catch {
            print("Fetching data Failed")
        }
        return users
    }
}
ios swift core-data
1个回答
0
投票

这也发生在我身上,就我而言,这是通过为删除和检索数据创建新的获取请求来解决的。

© www.soinside.com 2019 - 2024. All rights reserved.