我有一个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
}
}
}
}
下面是开关状态从Off变为On时的代码。
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)
}
这里的书籍是BooksDetail类型的var,它是一个核心数据实体,它使用func prepare从tableviewcontroller传递
我的问题是 books?.managedobjectcontext.save()保存修改后的数据,但是当我关闭应用并再次打开它(完全杀掉它)时,它会在表视图与更新的数据。如果我没有杀死应用程序,那么一切正常,我选择的单元格会正确更新。这是更新现有对象属性的正确方法吗?