过去通过 NSURLConnection.sendSynchronousRequest() 方法能同步请求数据。从iOS9起,苹果建议废除 NSURLConnection,使用 NSURLSession 代替 NSURLConnection。

如果想要 NSURLSession 也能够同步请求,即数据获取后才继续执行下面的代码,使用信号、信号量就可以实现。
样例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//创建NSURL对象
let urlString:String="http://hangge.com"
let url:NSURL! = NSURL(string:urlString)
//创建请求对象
let request:NSURLRequest = NSURLRequest(URL: url)
         
let session = NSURLSession.sharedSession()
         
let semaphore = dispatch_semaphore_create(0)
         
let dataTask = session.dataTaskWithRequest(request,
    completionHandler: {(data, response, error) -> Void in
        if error != nil{
            print(error?.code)
            print(error?.description)
        }else{
            let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print(str)
        }
                 
        dispatch_semaphore_signal(semaphore)
}) as NSURLSessionTask
         
//使用resume方法启动任务
dataTask.resume()
         
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
print("数据加载完毕!")
//继续执行其他代码.......

原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_816.html

Swift - 使用NSURLSession同步获取数据(通过添加信号量)相关推荐

  1. .net中如何同步获取数据方式增加一样数据自动刷新列表_知客CRM如何对接微信公众号...

    如果您的企业正在运营微信公众号,您可以将公众号上的粉丝和知客CRM中的客户信息进行身份绑定,这样公众号的粉丝就有了一个客户ID,能够与CRM系统进行业务交互,比如浏览公司产品.下单到CRM.发起投诉流 ...

  2. .net中如何同步获取数据方式增加一样数据自动刷新列表_期待已久的动态数据库工具终于来了!...

    本地数据库的创建和管理是大多数移动应用工程中的核心组件之一,一般会通过直接使用 SQLite 或 Jetpack Room 持久化库来完成.开发者们也在不断地寻求着更好的方式,使其能够在运行中的应用中 ...

  3. Ajax同步获取数据

    async设置为false就可以(默认是true) $.ajax({type: "POST",url: "/Administration/XieYi",data ...

  4. 【jsp中c标签的使用以及获取数据】

    一.jsp中c标签的使用 1.变量维护 (1)<c:set>设置变量值和对象属性值,语法如下: <c:set value="值" var="变量名&qu ...

  5. 使用vue的生命周期函数_异步_同步获取字典数据---基于Vue的uniapp手机端_前端UI_uview工作笔记003

    export default {         data() {}, async created() { //1.可以看到这里,需要用异步的方式请求.画面启动完毕以后,就去请求            ...

  6. ajax异步获取数据后动态向表格中添加数据的页面

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 [html] view plaincopyp ...

  7. ajax异步获取数据后动态向表格中添加数据(行)

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 [html] view plaincopyp ...

  8. JavaScript实现动态添加页面的表格行数并获取数据

    JavaScript实现动态添加页面的表格行数并获取数据,获取后的数据按照特殊的方式拼接存入数据库,用的时候再把它解析出来就行了. <table cellpadding="0" ...

  9. 华泰股票交易接口如何获取实时数据和同步时间数据?

    下面直接分享华泰股票交易接口如何获取实时数据和同步时间数据? 首先.获取实时数据 python的函数库非常丰富,httplib具备获取API接口数据的功能. API返回参数是json格式的,可以用非标 ...

最新文章

  1. 工欲善其事,必先利其器。如何玩转 VS Code?
  2. boost::mp11::mp_replace_front相关用法的测试程序
  3. java 实现set,Java--Set的三个具体实现类
  4. lua 求table长度和判断空
  5. 开源.NET企业级应用系统 OpenVista
  6. SqlServer用SQL语句将查出的数据直接插入到另一个张的表中
  7. 电脑突然无法播放html音频,电脑无法播放音频怎么办
  8. c语言查看cpu温度代码_很多程序员都不知道,C语言中还有“快类型”和“小类型”...
  9. 游戏软件的测试方法简述
  10. mysql触发器不能alter
  11. weblogic管理3 - 生产模式下免密码管理配置
  12. 高通平台音频调试常见问题点归纳
  13. Linux企业级项目实践之网络爬虫(27)——多路IO复用
  14. 关于python文件打开模式表示错误的是_python文件读取失败了该怎么处理 !
  15. NAS服务器和文件服务器区别
  16. 软件测试睡眠原理,测一测你的睡眠质量
  17. 《王亡於江上》之周昭王姬瑕
  18. 寒假训练1—H(第一次写出结构体数组)
  19. jQuery 遍历 - closest() 方法 is()方法
  20. 如何设计游戏中的道具功能(三)

热门文章

  1. 互联生活:业务模式聚焦
  2. nginx 403 Forbidden
  3. 【251】◀▶IEW-Unit16
  4. C#水晶报表,窗体不显示,闪退
  5. Linux系统安装phpMyAdmin
  6. WPF Splash Screen 和启动速度相关资料
  7. 过春节,坐汽车回家的朋友,注意了。。
  8. 网 络 欺 骗 技 术
  9. .NET 某电商交易平台Web站 CPU爆高分析
  10. 一个有限状态机的C++实现