2017-04-21 4 views
0

私はSwiftアプリに問題があります。私はSwift 3とXcode 8を使用しました。詳細ビューからオブジェクトを読み取るにはどうすればよいですか?

私はTableViewControllerとDetailViewControllerを実装しました。

私は新しい項目を追加し、TableViewControllerを自動的に更新したいと思います。

これは、DetailViewControllerから[OK]ボタンをクリックしたときに呼び出すTableViewControllerのコードです。 vistaDettaglio.nuovaLuceがnullでない場合

@IBAction func tornaAllaLista(_ segue: UIStoryboardSegue){ 
     do { 
      var vistaDettaglio: AggiungiLuceViewController = segue.source as! AggiungiLuceViewController 
      if(vistaDettaglio.nuovaLuce != nil){ 
       //verifico se devo aggiungere un valore o lo devo aggiornare 
       print(vistaDettaglio.isNew) 
       if(vistaDettaglio.isNew){ 
        self.listaLuci.append(vistaDettaglio.nuovaLuce!) 
       }else{ 

       } 
       self.tabella.reloadData() 
      } 
     } catch let errore { 
      print("[CDC] problema tornaAllaLista") 
      print(" Stampo l'errore: \n \(errore) \n") 
     } 
    } 

は、私は私のテーブルビューに、この新しい項目を追加したいです。

これはDetailViewControllerのコードです:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     //se il pulsante cliccato è diverso da OK torno indietro 
     if sender as? NSObject != self.buttonOK{ 
      return 
     } 

     let nomeLuce = self.textNomeLuce.text! 
     let pinArduino = Int16(self.textPinArduino.text!) 
     let tipoLuce = self.textTipoLuce.text! 

     self.nuovaLuce?.descrizione = nomeLuce 
     self.nuovaLuce?.pin_arduino = pinArduino! 
     self.nuovaLuce?.tipo_luce = tipoLuce 

     //DEVO VERIFICARE SE SONO IN MODIFICA O SALVATAGGIO 
     if(self.nuovaLuce != nil && (self.nuovaLuce?.id)! > 0){ 
      self.isNew = false; 
      LuciKitCoreDataController.shared.update(updateLuci: self.nuovaLuce!) 
     }else if(nomeLuce.characters.count>0){ 
      self.isNew = true 
      //ho inserito almeno un carattere 
      let idInsert = LuciKitCoreDataController.shared.addLuce(descrizione: nomeLuce, pin_arduino: Int(pinArduino!), id: -1 , tipoLuce: tipoLuce) 
      self.nuovaLuce?.descrizione = nomeLuce 
      self.nuovaLuce?.pin_arduino = pinArduino! 
      self.nuovaLuce?.tipo_luce = tipoLuce 
      self.nuovaLuce?.id = idInsert 
     }else{ 
      let alert = UIAlertController(title:"Attenzione", message: "Inserire un nome per la Luce", preferredStyle: UIAlertControllerStyle.alert) 
      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 
      self.present(alert, animated:true, completion: nil) 
     } 

    } 

私は新しいアイテムを追加しようとするのであれば、私はvistaDettaglio.nuovaLuce = NILを持っています。

この問題を解決するにはどうすればよいですか?

+0

:LuciKitCoreDataController.shared.update(updateLuci:!self.nuovaLuce) – KKRocks

+0

あなたが戻っ 'tableVC'にデータを送信したり、バック「viewWillAppear」イベントにデータをフェッチする' protocol'を作成することができます。そのために、 'detailVC'のクラスリファレンスを作成し、それを生かしておくことができます。 'tableVC'の' viewWillAppear'に 'detailVC'オブジェクトがメモリを持っているかどうかをチェックします。そうであれば、データを取得しようとします。 –

+0

@KKRocksデータベースに更新するオブジェクト – bircastri

答えて

0

Reactive Cocoaは、この正確なタスクについて不思議に思うでしょう。それを見てみましょう。

技術的にはあまりにもそうだと思われる場合は、カスタム通知と通知センターを使用するか、KVOを使用して詳細ビューのアイテムが変更された時期を判断できます。この行を何

関連する問題