完成处理程序调用太晚
Posted
技术标签:
【中文标题】完成处理程序调用太晚【英文标题】:Completion Handler called too late 【发布时间】:2015-02-11 16:05:24 【问题描述】:我正在尝试用通过DataTaskWithURL
调用获取的数据填充UITableView
。但是,tableview 在 completion handler 启动之前就已经加载了。
我搜索了这个问题并找到了将其移至主线程的方法,但这似乎不起作用。关于如何在表格视图加载之前将其移动到正确的队列的任何想法?
我的代码:
var jsonData: JSON = []
func getRequestForTableView()
let urlPath = "[URL]"
let url: NSURL = NSURL(string: urlPath)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: data, response, error -> Void in
let json = JSON(data: data)
println(json.count)
self.jsonData = json
)
task.resume()
【问题讨论】:
在完成处理程序结束时重新加载表视图(但在主线程上重新加载)。 ...并在获取数据时显示进度视图,或提供一些其他反馈以让用户知道正在发生的事情 假设self.jsonData
是您的数据源。在此completionHandler
的最后一行调用dispatch_async(dispatch_get_main_queue()) self.tableView.reloadData()
。
谢谢,我试过了,成功了!
【参考方案1】:
需要先检查响应代码和您的数据。响应码如 200。如果有你要找的东西,你需要在确认你的响应后在你的块中重新加载 TableView。
确保您正确解释 TableView 中的数据。
重新加载 TableView // Swift
dispatch_async(dispatch_get_main_queue(), () -> Void in
self.tableView.reloadData()
)
响应代码 // ios
if ([response statusCode] == 200)
//reload table here
【讨论】:
嗨 Chetan,我不完全理解你的建议。您能否提供一个代码示例?以上是关于完成处理程序调用太晚的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 4.5 自定义验证属性。 IsValid() 调用太晚了