ios - 快速控制应用程序流

标签 ios grand-central-dispatch startup control-flow

我正在尝试构建一个依赖于 CoreData 中的某些项目的应用程序.我让它与外部数据源同步,一切正常。

我的应用程序使用三种方法,并且是单 View 应用程序:

syncData()
createSpinner()
showResult()

现在createSpinner取决于 CoreData 中有一些数据- 并且只需要运行一次
showResult取决于已创建的“微调器”,并在创建时调用一次以初始化自身,以及每次旋转我的微调器时

我目前有SyncDataviewDidLoad() ,以及 createSpinner()viewDidAppear() (因为它会根据屏幕大小改变大小)

问题是在首次启动时数据没有及时加载 createSpinner() ,因此该应用程序看起来毫无用处。我如何“等待”第一次同步,或者设置一些东西来检查是否有一些数据?

最佳答案

解决办法是强制syncData() & createSpinner()在同一个线程中运行

您可以通过创建一个串行队列并将这两种方法异步分派(dispatch)到其中来做到这一点

let serialQueue = dispatch_queue_create("com.mycompany.myview", DISPATCH_QUEUE_SERIAL);

override func viewDidLoad() {
    super.viewDidLoad()
    dispatch_async(serialQueue) {
        syncData()
    }
}

override func viewDidAppear() {
    super.viewDidAppear()
    dispatch_async(serialQueue) {
        createSpinner()
    }
}

关于ios - 快速控制应用程序流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36383501/

相关文章:

ios - 如何提取iOS日历中的假期?

ios - UITableViewCell 中的较大图像?

ios - UITableView 没有滚动到最后一行,而是滚动到上面的 5-6 行。 (使用自动布局)

arrays - 以错误的顺序在 block 内循环附加到数组 - Swift 2.0

swift - 如何在 Swift 5.5 中等待来自同步函数的异步函数?

startup - 埃启动流程 [beaglebone]

tomcat - 如果配置不完整,则阻止(tomcat)Web 应用程序启动

ios - 使用 quartz2d 进行图像处理

ios - 何时使用主队列

Qt 应用程序在启动时运行时无法创建托盘图标