我有一个UITableViewController,它包含一个静态UITableView,您可以从中请求报价并买入或卖出股票。我在一个单独的ServerCommunicator类中处理与后端的所有通信。当请求完成时,ServerCommunicator会调用委托(tableViewController)来更新tableView中的字段。
在主队列中,我调用tableView.reloadData并显示字段。
问题是字段会立即显示但显示过时的值。但是,当我通过单击选择一行时,值会更新。
我做错了什么?
class AddStockTableViewController: UITableViewController, ServerCommunicatorDelegate {
………..
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.hidden = true
symbolLabel.hidden = true
quoteLabel.hidden = true
changeLabel.hidden = true
….….
}
@IBAction func getQuoteAction(sender: UIButton) {
if let symbol = getQuoteTextField.text {
serverCommunicator.updateQuote(symbol, delegate: self)
}
}
func didCompleteRequest(data : NSData)
{
quote = parseQuote(data)
self.symbolLabel.text = "(\(self.quote.symbol))"
self.nameLabel.text = self.quote.name
self.quoteLabel.text = "\(self.quote.currentPrice)"
self.changeLabel.text = “\(self.quote.change)"
…….
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
self.nameLabel.hidden = false
self.symbolLabel.hidden = false
self.quoteLabel.hidden = false
………
}
}
class ServerCommunicator
{
func sendRequest(requestURL : String, requestString : String, delegate : ServerCommunicatorDelegate)
{
if let requestData = requestString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false){
let request = NSMutableURLRequest(URL: NSURL(string: requestURL)!)
request.HTTPMethod = "POST"
let urlSession = NSURLSession.sharedSession()
let task = urlSession.uploadTaskWithRequest(request, fromData: requestData, completionHandler: {(data, response, error) -> Void in
if error != nil {
println(error.localizedDescription)
}
else {
delegate.didCompleteRequest(data)
}
})
task.resume()
} else {
print("Could not encode requestString to data")
}
}
…….
}
答案 0 :(得分:0)
没有 静态TableView更新之类的东西。所有更新都应该通过单元格更改进行,并且这种更改应由某种表视图或表视图单元格刷新触发。
未在UITableViewCell
中显示的更新表明该单元格已缓存且未重新加载新数据。
reloadData
中的 UITableView
触发器重新加载所有表格视图单元格。确保cellForRowAtIndexPath
返回新数据,dequeueReusableCellWithIdentifier
使用正确的ID。
最后,如果更改单个单元格,则重新加载所有单元格不是最佳实践。 Is it possible to refresh a single UITableViewCell in a UITableView?是的。