1

我有一个 tableviewcontroller,我从那里调用另一个 View Controller。这个新控制器在选定的表格视图单元格上填充对象。在新的视图控制器中,我正在捕获开关更改。当开关打开时,我将开关状态保存到从表视图发送的同一对象中的核心数据中。

下面是调用新视图控制器的代码,segue 是“ShowDetails”

override func prepare(for segue: UIStoryboardSegue, sender:Any?){
    if (segue.identifier == SegueAddBooksViewController){
        if let destinationViewController = segue.destination as? bookDetailViewController {
            destinationViewController.managedObjectContext = persistentContainer.viewContext
        }
    }
        else{
            if (segue.identifier == "showDetails"){
                let selectedIndex = TableView.indexPathForSelectedRow
                let selectedBook = fetchedResultsController.object(at: selectedIndex!)
                if let controller:DetailsController = segue.destination as? DetailsController{

                     controller.books = selectedBook
                }

            }
    }
    }

下面是开关状态从关闭变为开启时的代码。

func stateChanged(switchState: UISwitch){

    if switchState.isOn{
        let date = Date()
        books?.setValue(date, forKey: "endDate")
        books?.setValue(true, forKey: "bookState")

        do{
            try books?.managedObjectContext?.save()
        }catch let error as NSError{
            print("\(error)")
        }

        let dateFormat = DateFormatter()
        dateFormat.dateFormat = "MM/dd/YY"
        endBook.text = dateFormat.string(from: (books?.endDate)! as Date)

    }

这里的 books 是 BooksDetail 类型的 var,它是一个核心数据实体,使用 func prepare 从 tableviewcontroller 传递

我的问题是books?.managedobjectcontext.save()保存修改后的数据,但是当我关闭应用程序并再次打开它(完全杀死它)时,它将在表格视图中创建一个包含更新数据的新条目。如果我不杀死该应用程序,那么一切正常,并且我选择的单元格会正确更新。这是更新现有对象属性的正确方法吗?

4

0 回答 0