我的问题是当我在一些api调用结束后尝试去另一个视图时,它不会进入下一个视图。这是下面的代码。提前谢谢。
var task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: {
(data, response, error) in //println(response)
//println(error)
self.myWeather.apiCallData = JSON(data: data)
self.myWeather.apiCallError = error
println("api call finished")
if error == nil {
println("no error")
let weatherView = self.storyboard?.instantiateViewControllerWithIdentifier("WeatherView") as WeatherViewController
weatherView.myWeather = self.myWeather
self.navigationController?.pushViewController(weatherView, animated: false)
}
}).resume()
打印api调用完成,控制台没有错误。但它没有进入另一个场景。
答案 0 :(得分:2)
问题是dataTaskWithURL方法的完成处理程序代码在后台辅助线程中运行,而不是在主线程中运行(可能发生视图控制器转换)。 在主线程队列闭包中包含对pushViewController的调用:
...
dispatch_async(dispatch_get_main_queue(), {
let navigationVC = self.navigationController
navigationVC?.pushViewController(weatherView, animated: false)
})
...
我已经用两行编写代码来避免swift编译器错误(单个语句和闭包返回值:请参阅this)。你也可以把它写成:
...
dispatch_async(dispatch_get_main_queue(), {
(self.navigationController)?.pushViewController(weatherView, animated: false)
return
})
...