我有一张30英寸的桌子,分为4个部分..
我的问题是,当我想更改其中一个单元格中的某个值时,该值不会更新/更改,直到我将该单元格滚出视图并返回...
我使用UIAlert,输入新值,将其保存到数据库..并且保存的值正常,我从数据库中再次获得正确的值..
但是当我重新加载tableView
时,它没有显示新值..
Bouns:我有两个名为templateTableView
的tableView,另一个名为fieldTableView
。我正在尝试更改值fieldTableView
。而将tableView.reload()
更改为self!.fieldTableView.reload()
也不起作用。
来自didSelectRowAtIndexPath:
}else if currTemplate!.hasPassFail{
var alertController:UIAlertController?
alertController = UIAlertController(title: "Enter new value",
message: "Enter new value",
preferredStyle: .Alert)
alertController!.addTextFieldWithConfigurationHandler(
{(textField: UITextField!) in
textField.placeholder = ""
textField.keyboardType = UIKeyboardType.NumbersAndPunctuation
})
let action = UIAlertAction(title: "Submit",
style: UIAlertActionStyle.Default,
handler: {[weak self]
(paramAction:UIAlertAction!) in
if let textFields = alertController?.textFields{
let theTextFields = textFields as! [UITextField]
let enteredText = theTextFields[0].text
//what to do after edit, here:
switch indexPath.section{
case 1:
if let value = enteredText.toInt(){
self!.currTemplate!.backgroundMin[indexPath.row] = value
}else{
self!.presentViewController(self!.wrongNumberAlert, animated: true, completion: nil)
return
}
case 2:
if let value = enteredText.toInt(){
self!.currTemplate!.legendMin[indexPath.row] = value
}else{
self!.presentViewController(self!.wrongNumberAlert, animated: true, completion: nil)
return
}
case 3:
if let value = enteredText.toDouble(){
self!.currTemplate!.ratioMin[indexPath.row] = value
}else{
self!.presentViewController(self!.wrongNumberAlert, animated: true, completion: nil)
return
}
default:
0-0
}
var date = NSDate()
self!.currTemplate!.timestamp = date.makeTimestampString()
self!.appDelegate.dbInterface.updateTemplate(self!.currTemplate!)
//self!.templateArr = self!.appDelegate.dbInterface.findTemplates()
self!.findAllNotDeleteOnSync()
println("Data was added to DB: \(self!.currTemplate!.ratioMin[indexPath.row])")
self!.templateTableView.reloadData()
self!.templateTableView.selectRowAtIndexPath(self!.currentTemplateIndex, animated: false, scrollPosition: .None)
dispatch_async(dispatch_get_main_queue(),{
tableView.reloadData()
})
}
})
let cancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: nil)
alertController?.addAction(cancel)
alertController?.addAction(action)
self.presentViewController(alertController!, animated: true, completion: nil)
}
修改 应该有效的代码部分是:
dispatch_async(dispatch_get_main_queue(),{
tableView.reloadData()
})
答案 0 :(得分:1)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
// do DB stuff in background thread
// ...
dispatch_async(dispatch_get_main_queue(), {
// Update UI in main thread when done
// ...
})
})
答案 1 :(得分:1)
此行导致故障
if indexPath.row == 0 && indexPath.section == 1
仔细看看你在这种情况下写的是什么
你附加的数据只有ablove条件满足
但在这种情况下,在didselectrowatindexpath
case 3:
if let value = enteredText.toDouble(){
self!.currTemplate!.ratioMin[indexPath.row] = value
}else{
self!.presentViewController(self!.wrongNumberAlert, animated: true, completion: nil)
return
}
它失败了
这就是为什么当您在第2部分和第2部分中编辑行时没有附加数据的原因。 3
在其他地方移动附加代码
或逐段使用if indexPath.row == 0 && indexPath.section == 1
这个条件
答案 2 :(得分:0)
请改用:
tableView.reloadData()
答案 3 :(得分:0)
为我工作:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
dispatch_async(dispatch_get_main_queue(), {
// Update UI in main thread when done
tableView.reloadData()
})
})