繁体   English   中英

Swift iOS如何获取NSURLSession的结果

[英]Swift iOS how to get the result of NSURLSession

我有一个关于NSURLSession的问题,我已经使用NSURLSession下载了JSON数据,我想在enter code here访问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我得到空变量

有什么帮助吗?

检查是否在同一线程上访问jsonData。 也许您在这里有比赛条件。

问题是您不了解带有完成块的异步功能如何工作。

看看我对此线程的回答。 我详细解释了发生了什么:

为什么Microsoft Azure(或一般称为Swift)在表查询后无法更新变量以返回?

(不要让线程的标题误导您。它与Microsoft Azure无关。)

您正在使用的方法dataTaskWithRequest在URL会话的委托队列上调用完成关闭。 除非您提供了一个后台队列作为委托队列,否则您无需为dispatch_async烦恼。

我发现了解决方案让优先级= DISPATCH_QUEUE_PRIORITY_DEFAULT dispatch_async(dispatch_get_global_queue(priority,0)){self.jsonData = JSON(数据:数据)dispatch_async(dispatch_get_main_queue()){self.collectionView?reloadData()}}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM