【问题标题】:How can read object from detail view? [duplicate]如何从详细视图中读取对象? [复制]
【发布时间】:2017-04-21 21:35:28
【问题描述】:

我的 Swift 应用程序有问题。我使用了 Swift 3 和 Xcode 8。

我已经实现了一个 TableViewController 和 DetailViewController。

所以我想添加一个新项目,然后自动刷新 TableViewController。

这是我在 DetailViewController 中单击 OK 按钮时调用的 TableViewController 的代码。

@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")
        }
    }

如果 vistaDettaglio.nuovaLuce 不为空,我想在我的 TableView 中添加这个新项目。

这是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。

我该如何解决这个问题?

【问题讨论】:

  • 这一行做什么:LuciKitCoreDataController.shared.update(updateLuci: self.nuovaLuce!)
  • 您可以创建一个protocol 以将数据发送回tableVC 或在“viewWillAppear”事件中取回数据。为此,您可以创建detailVC 的类引用并使其保持活动状态。在tableVCviewWillAppear 上检查detailVC 对象是否有内存。如果是,请尝试获取数据。
  • @KKRocks 该行将对象更新到数据库中
  • 哪一行更新了你的tableview?
  • 有很多很多做你想做的事的例子。搜索pass data back from segue。通读几个例子,你就可以上路了。

标签: ios iphone swift3 xcode8


【解决方案1】:

Reactive Cocoa 将为这项确切的任务创造奇迹。看看吧。

如果这似乎有点过于技术性,您可以尝试使用自定义通知和通知中心,或者您可以尝试使用 KVO 来确定详细视图中的项目何时更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2017-10-08
    相关资源
    最近更新 更多