別のView Controllerを呼び出しているところからtableviewcontrollerがあります。この新しいコントローラーは、選択したテーブル ビュー セルにオブジェクトを設定します。新しいView Controllerでは、スイッチの変更をキャプチャしています。スイッチがオンになると、テーブルビューから送信されたのと同じオブジェクトのコアデータにスイッチの状態を保存します。
以下は、新しい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 は、 func prepare を使用して tableviewcontroller から渡されるコア データ エンティティであるタイプ BooksDetail の var です。
私の問題は、books?.managedobjectcontext.save()が変更されたデータを保存することですが、アプリを閉じて再度開くと (完全に強制終了すると)、更新されたデータでテーブル ビューに新しいエントリが作成されます。アプリを強制終了しないと、すべてが正常に機能し、選択したセルが正しく更新されます。これは、既存のオブジェクト属性を更新する正しい方法ですか?.