1

別の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()が変更されたデータを保存することですが、アプリを閉じて再度開くと (完全に強制終了すると)、更新されたデータでテーブル ビューに新しいエントリが作成されます。アプリを強制終了しないと、すべてが正常に機能し、選択したセルが正しく更新されます。これは、既存のオブジェクト属性を更新する正しい方法ですか?.

4

0 に答える 0