0
为了从View Controller完全呈现我的视图,我需要从网络请求获得响应。查看取决于网络请求
我一直在尝试这么做的方式很多,但每次都不成功。
最初,我通过在调用任何方法呈现视图之前发出“同步”网络请求来获得它的工作。但是,编译器警告我说同步网络请求自ios 8起弃用。
以最高性能的方式完成此操作的最佳方法是什么?
我曾尝试:
override func loadView() {
dispatch_sync(dispatch_get_main_queue()){
// GET the Markup
let url = NSURL(string: self.PageURL)
let request = NSURLRequest(URL: url!)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let RequiredViewData = session.dataTaskWithRequest(request) {(data, response, error) in
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
self.RequiredViewJSON = json
self.view = UIView(frame: UIScreen.mainScreen().bounds)
print(data)
} catch {
print("error serializing JSON: \(error)")
}
}
RequiredViewData.resume()
}
}
但是,这只是让我的应用程序呈现为空白屏幕。
基本上我需要完成的是: 发出网络请求并在任何视图呈现发生之前接收响应。
在此先感谢!
有没有办法让我无法在主线程上执行网络请求? – luckybroman5
其实我认为你是在后台线程上做这件事。我认为NSURLSession在默认情况下是异步的,即使你将其包装在“dispatch_get_main_queue”中,回调仍然发生在后台线程上,因为这些东西需要在主线程上发生,所以会导致UI问题。我会更新我的答案,我相信你想要的。不过,我会强烈建议不要重写loadView。 –