如何让ios中的函数调用等待,直到该函数内的块执行完毕?

2023-12-29

在以下函数中,我使用了一个块。但是当我调用这个函数时,它甚至在块执行之前就返回了。我理解 Block 依次使用线程并单独执行,以便该函数不会等待它返回。但是,是否有任何其他方法可以让函数执行等待,或者有任何其他方法可以在不使用块本身的情况下实现该块的功能?

-(int)findCurrentZip
{
        CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:[self findCurrentLatitude]
                                                              longitude:[self findCurrentLongitude]];
         int zipcode;
        self.myGeocoder = [[CLGeocoder alloc] init];
        [self.myGeocoder 
         reverseGeocodeLocation:userLocation
         completionHandler: (id)^(NSArray *placemarks, NSError *error) {
             if (error == nil && [placemarks count] > 0)
             {
                 NSLog(@"Placemarks: %@",placemarks);
                 CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
                 NSLog(@"Country = %@", placemark.country);
                 NSLog(@"Postal Code = %@", placemark.postalCode);
                 zipcode = (int)placemark.postalCode;
                 NSLog(@"Locality = %@", placemark.locality);
                 NSLog(@"Country%@",[placemarks lastObject]);
             }
             else if (error == nil && [placemarks count] == 0)
             {
                 NSLog(@"No results were returned.");
             }
             else if (error != nil)
             {

             }
        }];

        return zipcode;
    }

首先,我建议重新考虑你的设计。不要从此方法返回 zipCode 值,而是调用completionHandler 中的其他方法(创建协议/委托或其他方法)。这reverseGeocodeLocation::方法可能需要一些时间,并且您不想暂停等待结果的主线程的执行。

如果您确实想阻止,您可以考虑使用(滥用?)dispatch_semaphore_t。将其初始化为 0 并dispatch_semaphore_wait致电后reverseGeocodeLocation::。在completionHandler中用以下信号通知它dispatch_semaphore_signal.

更多信息:使用调度信号量来调节有限资源的使用 http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW24

编辑:像其他人建议的那样,使用 __block 限定符声明 zipCode

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让ios中的函数调用等待,直到该函数内的块执行完毕? 的相关文章

  • 如何知道用户何时更改设置包

    我让用户在 iPhone 的设置区域中更改他们的设置 在下一次网络同步期间 我想将用户更改发送到服务器 但前提是做出改变 但是我如何知道用户何时在设置区域中进行了更改 如果可以的话 我想避免选择总是发送信息 无论是否更改 或者首先从服务器获
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • iPhone 应用程序中的异步、同步、线程

    我正处于一个应用程序的设计阶段 该应用程序将利用 REST Web 服务 并且在使用异步 同步和线程方面遇到了困境 这是场景 假设您有三个选项可供深入研究 每个选项都有自己的基于 REST 的资源 我可以使用同步请求延迟加载每个请求 但这会
  • 使用 iPhone 中的地图视图读取当前位置名称

    我读取了当前位置的纬度和经度值 然后成功将该位置固定在 iPhone 中 现在我想使用这个纬度和经度值读取该地名 我使用以下代码来读取查找当前位置 void mapView MKMapView mapView1 didUpdateUserL
  • iPhone 的电子书框架

    我有一本书想作为 iPhone 应用程序发布 有谁知道我可以使用免费 或便宜 的框架来实现这一目标 换句话说 我想为我的书创建一个独立的 XCODE 项目 其中包含 iPhone 用户将本书作为独立应用程序阅读所需的所有代码 我见过 O R
  • 如何知道我的应用程序使用了多少 iCloud 空间?

    有没有办法查看我的应用程序正在备份到 iCloud 的内容以及它消耗了多少内存 Settings gt iCloud gt Storage Backup gt Manage Storage将显示正在备份的总计内容 iOS 会备份位于应用程序
  • 持久化 UINavigationItem 的 rightBarButtonItem 属性

    这可能是一个愚蠢的问题 但是有可能保持正确的吗 UIBarButtonItem跨由一个管理的多个视图UINavigationController 我的一系列观点通常具有相同的权利UIBarButtonItem 但是当我将新视图推送到我的UI
  • 如何获取CATransition/Animation的结束事件?

    我的代码如下所示 CATransition transition CATransition animation transition duration duration 我希望得到CATransition Animation的结束事件 是否
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • 在 iOS 上将 NSString 转换为 NSDate 的正确方法?

    我一直在使用此方法将常规 NSString 对象转换为 NSDate 但尝试向 Apple 提交更新 但遭到拒绝 在 iOS 中还有什么其他方法可以做到这一点 NSString date str 2011 08 12T12 20 00Z N
  • 在 iOS 7 中 viewForHeaderInSection 部分是从 1 开始而不是从 0 开始

    我正在处理UITableView在我的项目中 这个项目是在 Xcode 4 5 中创建的 现在我正在使用 Xcode 5 所以我的问题是何时在 iOS 6 中运行我的项目 viewForHeaderInSection方法部分从 0 开始没问
  • 如何按字母顺序对 UITableView 分区进行排序?

    我有一个包含 3 个类别的分段 UITableView 我正在使用这段代码 NSArray arrayOne NSArray arrayWithObjects one two three four nil NSDictionary dict
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • iOS7 由 Interface Builder 生成的 NSIBPrototypingLayoutConstraint 自动布局约束问题

    以前在 iOS6 中 我的聊天消息视图控制器使用 IB 中精心构建的自动布局约束正确显示和动画 下面是 Xcode 5 中删除了约束的当前视图层次结构 升级到 XCode 5 和 iOS7 后 我发现我需要清除所有旧的约束才能解决默认的半透
  • 无法将项目添加到 NSMutableArray ivar

    我的目标是将字符串添加到数组中 并在我调用的方法中执行此操作 在这个方法中 我在数组中得到一个空值 但不知道为什么 我在课程开始时有这样的内容 NSMutableArray listOfEvents 以及我在每个事件上调用的方法 void
  • UITabBarController 为 TabBar 的每个 ViewController 提供不同的 Storyboard 文件

    我的团队正在开发一个具有 UITabBarController 的应用程序 我们正在使用 Storyboard 来开发界面和流程 由于我们是一个团队 所以我们不能将所有流程放在一个故事板中 因为这会导致与 SVN 同步出现问题 所以 解决方
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • Glib 在 iPhone 应用程序中的使用

    我想基于现有的开源 Objective C 框架开发一个 iPhone 应用程序 但是该框架广泛使用了 glib 库 我找不到一种方法来构建和包含 iPhone 应用程序的 glib 库 非越狱 有什么办法可以做到这一点 或者有没有推荐的方
  • UIViewController 内的 UIsearchController 使用自动布局

    有没有人成功实施过UIViewController其中包含两个UISearchController searchBar and a UItableView使用自动布局来布局所有内容 我正在尝试实现类似的目标1密码 https itunes

随机推荐

  • MailChimp API 成员信息问题

    我需要通过 api 检索所有用户信息 在我发现的文档中查找它 http apidocs mailchimp com api 2 0 lists member info php http apidocs mailchimp com api 2
  • 无法安装包车

    我在 Linux mint 17 3 64 位中使用 R 版本 3 2 3 我试图安装包 car dependencies TRUE 但安装失败并出现以下错误消息 gt warnings Warning messages 1 In inst
  • 通过 VBA 使用 SFTP 下载文件

    我的目标是从 SFTP 服务器下载文件 而不是上传文件 并且我正在尝试调整本网站上另一个问题的代码来执行此操作 为了方便起见 我粘贴了下面的代码 我从 Putty 下载了 PSFTP 当我尝试使用以下命令行进行连接时 PSFTP 关闭 op
  • PHP 比较和更改多维数组中的某些元素

    简而言之 我有两个简单的数组 我想验证第二个数组中的某些键是否具有空值 并将它们替换为第一个数组中的对应值 Example a1 1 gt one 2 gt two 3 gt three 5 gt cinco 6 gt six a2 2 g
  • 数据绑定如何工作?

    我现在正在尝试将数据添加到列表框中 如果您查看我的 XAML 这是我构建的列表框
  • 无法访问 Chrome 中另一个框架的内容

    我有两个框架 两个框架中的页面都来自同一域 本地主机或活动域 都使用相同的协议 当第二个框架 xsample 完全加载并且任何 onload JS 函数完成时 第一个框架需要访问第二个框架 xsample 的元素 但第二帧需要一段时间才能加
  • 在 codeigniter 中创建父树及其子树

    我正在 codeigniter 中工作 我想在父代理下显示父代理及其子代理 我的父代理数据显示如下 Array 0 gt stdClass Object id gt 1 Introducer code gt 0 Designation gt
  • PHP 速记加法运算符 - 未定义的偏移量

    我使用 PHP 速记加法运算符来统计多维数组中特定 id 出现的次数 source tally array foreach items as item source tally item gt getId 1 第一次遇到新 id 时 它将其
  • 是否有可能始终消除 goto?

    在做好一切的同时withgoto 很容易 由 f ex IL 证明 我想知道是否也可以消除all具有更高级别表达式和语句的 goto 语句 例如 使用 Java 支持的所有内容 或者 如果您愿意 我正在寻找的是始终有效的 重写规则 无论 g
  • 如何让 ng-repeat 过滤掉重复的结果

    我正在运行一个简单的ng repeat通过 JSON 文件并想要获取类别名称 大约有 100 个对象 每个对象属于一个类别 但只有大约 6 个类别 我当前的代码是这样的
  • 在开发和生产环境中使用不同的Web.config

    我需要在 ASP NET 应用程序中使用不同的数据库连接字符串和 SMTP 服务器地址 具体取决于它的运行位置 开发环境或生产环境 应用程序通过以下方式从 Web config 文件读取设置WebConfigurationManager A
  • 如何在java中使用web服务时触发处理程序类

    Using Axis 1 4我构建了将使用外部服务器服务的客户端应用程序 服务器应用程序使用包含标头标记和正文标记的肥皂消息进行响应 我的标题标签问题 我试图找到方法来获取header元素 到目前为止做了什么 我发现我需要使用一个扩展的处理
  • 在 using 块中使用“as IDisposable”

    编辑 我的问题不是关于 using 块及其工作原理 我的问题是关于两种方法的差异 如下所示 我正在阅读 CQRS 旅程指南 但我不明白这行代码 using repo as IDisposable 这意味着什么 为什么使用它作为 IDispo
  • NSDate dateFromString,如何解析“周围”UTC、GMT 和用户区域设置?

    我从 xml 文件中解析一些值 有一个 25 12 2010 T 23 40 00 带有时间和日期的字符串 还有一个带有 GMT 偏移量的字符串 例如 0200 所以上面的时间是 12 月 25 日 23 40 00 时区 0200 GMT
  • Jest - 如何重置每个测试的对象状态?

    我是 Jest 新手 我试图弄清楚如何在每次测试后重置测试对象 当前代码 describe only POST request missing entry gt newBlog is the test object let newBlog
  • Jenkins -> 通过 Docker-Agents 循环

    我想使用几个构建一些包Docker 镜像 in a 詹金斯管道 下面的管道可以工作 但我想实现阶段是一种更 循环 的方式 pipeline agent label docker stages stage Running on ubuntu
  • 如何使用 SIFT 和 OpenCV 在图像中搜索目标?

    我正在开发一个简单的扑克牌检测程序 现在我有一个有效的筛选算法here http www aishack in 2010 07 implementing sift in opencv 我在卡片周围创建了一些边界框 然后我在要搜索的卡上使用
  • JSON 异常:org.json.JSONException:未终止的数组

    我正在开发一个 Android 应用程序 它从服务器请求一些数据 服务器以 JSON 格式返回数据 除了 API 之外 一切都工作正常 经过调试 我发现了这个异常 org json JSONException Unterminated ar
  • (错误)使用 C# 迭代器实现协程的陷阱

    我正在编写重构 Silverlight 程序以使用 WCF 服务中的部分现有业务逻辑 这样做时 我遇到了 Silverlight 3 中的限制 即只允许异步调用 WCF 服务 以避免长时间运行或无响应的服务调用阻塞 UI 线程的情况 SL
  • 如何让ios中的函数调用等待,直到该函数内的块执行完毕?

    在以下函数中 我使用了一个块 但是当我调用这个函数时 它甚至在块执行之前就返回了 我理解 Block 依次使用线程并单独执行 以便该函数不会等待它返回 但是 是否有任何其他方法可以让函数执行等待 或者有任何其他方法可以在不使用块本身的情况下