在 swift 中控制应用程序流程
Controlling app flow in swift
我正在尝试构建一个应用程序,该应用程序依赖于 CoreData
中的一些项目。我让它与外部数据源同步,一切正常。
我的应用使用了三种方法,并且是一个单视图应用:
syncData()
createSpinner()
showResult()
现在 createSpinner
依赖于 CoreData
中的一些数据 - 并且只需要 运行 一次
showResult
依赖于已创建的 'Spinner',并且在创建时被调用一次以初始化自身,以及每次旋转我的微调器时被调用
我目前在 viewDidLoad()
中有 SyncData
,在 viewDidAppear()
中有 createSpinner()
(因为它会根据屏幕尺寸改变大小)
问题是首次启动时数据未及时加载 createSpinner()
,因此应用程序看起来毫无用处。我如何 'wait' 第一次同步,或设置一些东西来检查是否有一些数据?
解决方案是在同一个线程
中强制 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()
}
}
我正在尝试构建一个应用程序,该应用程序依赖于 CoreData
中的一些项目。我让它与外部数据源同步,一切正常。
我的应用使用了三种方法,并且是一个单视图应用:
syncData()
createSpinner()
showResult()
现在 createSpinner
依赖于 CoreData
中的一些数据 - 并且只需要 运行 一次
showResult
依赖于已创建的 'Spinner',并且在创建时被调用一次以初始化自身,以及每次旋转我的微调器时被调用
我目前在 viewDidLoad()
中有 SyncData
,在 viewDidAppear()
中有 createSpinner()
(因为它会根据屏幕尺寸改变大小)
问题是首次启动时数据未及时加载 createSpinner()
,因此应用程序看起来毫无用处。我如何 'wait' 第一次同步,或设置一些东西来检查是否有一些数据?
解决方案是在同一个线程
中强制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()
}
}