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