ios - 在执行下一条语句之前如何等待 NSURLConnection 委托(delegate)完成?

标签 ios objective-c delegates nsurlconnection nsurlrequest

这很难搜索。 我发现了一个类似的问题,iOS 5 Wait for delegate to finish before populating a table? ,但接受的答案是“刷新表格 View ”,这对我没有帮助。我发现的其他结果往往是在 c# 中。

我有一个从 iPhone 流式传输到 Wowza 服务器的应用程序。当用户点击记录时,我生成一个唯一的设备 ID,然后将其发送到服务器上的 PHP 脚本,该脚本返回一个带有配置设置的 JSON 文档(其中包括 rtmp 转储链接)。

问题是,委托(delegate)方法是异步的,但我需要在 - (IBAction)recordButtonPressed 方法的下一行代码之前获取配置设置,因为该代码设置了配置文件设置,然后根据这些设置进行记录。

我意识到我可以像现在一样在 -recordButtonPressed 中创建 NSURLConnection,然后继续 inside 委托(delegate)的设置代码方法 connectionDidFinishLoading (或者只是封装设置和从那里调用它的方法)但这牺牲了连贯的功能设计,这很糟糕。

难道没有一些简单的 waitUntilDelegateIsFinished:(BOOL)nonAsyncFlag 标记可以发送给委托(delegate)人,这样我就可以进行从 Web 提取数据的顺序操作吗?

最佳答案

I've realized I could make the NSURLConnection in -recordButtonPressed like I am currently, and then continue the setup code inside the delegate method connectionDidFinishLoading (or just encapsulate the setup and method call it from there) but that's sacrificing coherent design for functionality and that sucks.

您已经分析和了解了情况,并且完美地描述了可能的解决方案。我只是不同意你的结论。这种事情经常发生:

- (void) doPart1 {
    // do something here that will eventually cause part2 to be called
}

- (void) doPart2 {
}

您可以玩各种带有调用的游戏,以使其更加优雅和通用,但我的建议是,不要与框架作对,因为您所描述的正是异步的本质。 (并且不要在主线程上使用同步请求,因为这会阻塞主线程,这是一个禁忌。)

的确,在事件驱动的框架中,“等到”这个概念本身就是一种诅咒。

关于ios - 在执行下一条语句之前如何等待 NSURLConnection 委托(delegate)完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613038/

相关文章:

c# - NSActionDispatcher 在连接 Instruments 时被垃圾收集

c# - 从特殊文件夹 C# 检索所有文件的方法

ios - 在 Firebase DataSnapshot 数组中查找自定义对象的索引

javascript - iOS UIWebview缓存机制

ios - 如何将按钮发件人转移到另一个类(class)

ios - SKProductsRequestDelegate 方法未在类内调用

ios - 如何在 Objective C 中将 PDF 转换为二进制

java - 是否有可能从 Android/Java 或 iPhone/objective-C 的代码中获取变量名称以进行调试

ios - 如何保存倒数计时器的进度?

c# - 委托(delegate)和事件之间的关系是什么?