【发布时间】: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的类引用并使其保持活动状态。在tableVC的viewWillAppear上检查detailVC对象是否有内存。如果是,请尝试获取数据。 -
@KKRocks 该行将对象更新到数据库中
-
哪一行更新了你的tableview?
-
有很多很多做你想做的事的例子。搜索
pass data back from segue。通读几个例子,你就可以上路了。