快速控制应用流程

时间:2016-04-03 09:02:18

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

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

我的应用程序使用三种方法,并且是一个单一的视图应用程序:

syncData()
createSpinner()
showResult()

现在createSpinner取决于CoreData中的某些数据 - 只需要运行一次

showResult依赖于已经创建的'Spinner',并且在创建时调用一次以初始化自身,以及每次旋转我的微调器时

我目前SyncData中有viewDidLoad()createSpinner()中有viewDidAppear()(因为它会根据屏幕尺寸改变大小)

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

1 个答案:

答案 0 :(得分:2)

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

你可以通过创建一个串行队列并将两个方法异步调度到它中来实现这个目的

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()
    }
}