我对NSURLSession
有疑问
我使用JSON
下载了NSURLSession
个数据
我想从这个代码块之外访问JSON enter code here
数据变量,所以我操纵它
这是我的代码
// variable declared in my class
var jsonData = JSON("")
// my function
func loadCategories(){
var url = NSURL(string: "http://localhost:8888/api/v1/getAllCategories")
var request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "GET"
NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, errors: NSError!) in
self.jsonData = JSON(data: data)
}).resume()
}
当我尝试将jsonData放在NSURLSession
块之外时,我得到空变量
任何帮助?
答案 0 :(得分:0)
检查您是否在同一个线程上访问jsonData。也许你在这里遇到了竞争条件。
答案 1 :(得分:0)
问题在于您不了解完成块的异步功能如何工作。
看看我对这个帖子的回答。我详细解释了发生了什么:
(不要让线程的标题误导你。它与Microsoft Azure无关。)
您正在使用的方法dataTaskWithRequest在URL会话的委托队列上调用您的完成闭包。除非您已将后台队列作为委托队列提供,否则无需使用dispatch_async。
答案 2 :(得分:0)
我找到了解决方案 let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT dispatch_async(dispatch_get_global_queue(priority,0)){self.jsonData = JSON(data:data)dispatch_async(dispatch_get_main_queue()){self.collectionView?reloadData()}}