簡體   English   中英

在managedContext.save之后未更新核心數據但未拋出任何錯誤

[英]Core data not being updated after managedContext.save but no errors thrown

我正在嘗試更新Core數據中已保存的條目,objectContext不是nil也不是managedObject。 使用所述Id將新值設置為managedObject。 調用managedContext.save()時不會拋出任何錯誤,但coreData中沒有反映任何更改

我已經嘗試使用setValue()無效,我已經在谷歌和堆棧溢出搜索類似的問題,大多數時候它說,托管對象是零。

    var taskName:String!
    var resultsController: NSFetchedResultsController<Tasks>!

    // MARK: - Properties
    // Manage objects and update tasks
    //var resultsController: NSFetchedResultsController<Tasks>!
    var managedContext: NSManagedObjectContext!
    var tasksArray = [NSManagedObject]()
    var fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Tasks")


func settextfields() {
        let res = resultsController.fetchedObjects!
        print(res)
        for r in res {
            if r.name == taskName {
                txt_name.text = "\(r.name ?? "Task name" )"
                txt_date.text = "\(r.date ?? "Task date")"
                segmentedBtn.selectedSegmentIndex = Int(r.priority)
            }
        }
    }

    func loadTable() {
        let request: NSFetchRequest<Tasks> = Tasks.fetchRequest()
        // Sort by date
        let sortDescriptor = NSSortDescriptor(key: "date", ascending: true)
        request.sortDescriptors = [sortDescriptor]
        resultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: coreData.managedContext, sectionNameKeyPath: nil, cacheName: nil)

        // Fetch data
        do {
            try resultsController.performFetch()
            print("Fetch successful")
        } catch  {
            print("Error performing fetch: \(error)")
        }
    }

    @IBAction func saveEdit(_ sender: Any) {
                guard let name = txt_name.text, !name.isEmpty else {
                    return
                }

                guard let date = txt_date.text, !date.isEmpty else {
                    return
                }


        do {
            loadTable()
             let res = resultsController.fetchedObjects!
                for r in res {
                    i += 1
                    if r.name == taskName {
                        print(r)
                        guard let name = txt_name.text, !name.isEmpty else {
                            return
                        }
                        guard let date = txt_date.text, !date.isEmpty else {
                            return
                        }
                        do {
                            r.name = name
                            r.date = date
                            r.priority = Int16(segmentedBtn.selectedSegmentIndex)
                        }

                        do {
                            try managedContext.save()
                            print(managedContext, r)
                            dismiss(animated: true)
                            print("Edit Successful!")
                        } catch  {
                            print("Error saving task: \(error)")
                        }
                    }
            }

        }

我實際上使用謂詞重寫了保存函數,就像上面提到的人一樣,並且它有效。 然后我將一個viewWillLoad添加到mainViewController,以便在更新條目后重新加載tableView

@IBAction func saveEdit(_ sender: Any) {
        guard let name = txt_name.text, !name.isEmpty else {
            return
        }

        guard let date = txt_date.text, !date.isEmpty else {
            return
        }


        do {
            let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "Tasks")
            fetchRequest.predicate = NSPredicate(format: "name = %@", taskName)
            let test = try managedContext.fetch(fetchRequest)
            let obj = test[0] as! NSManagedObject

            obj.setValue(name, forKey: "name")
            obj.setValue(date, forKey: "date")
            obj.setValue(Int16(segmentedBtn.selectedSegmentIndex), forKey: "priority")


            do {
                try managedContext.save()
                dismiss(animated: true)
                print("Edit Successful!")
            } catch  {
                print("Error saving task: \(error)")
            }
        } catch {
            print(error)
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM