2016-04-03 88 views
1

我正在嘗試構建一個應用程序,該應用程序依賴於CoreData中的某些項目。我讓它與外部數據源同步,這一切都很好。快速控制應用程序流程

我的應用程序使用了三種方法,並且是單一視圖的應用程序:

syncData() 
createSpinner() 
showResult() 

現在createSpinner依賴於CoreData有一些數據 - 而且只需要運行一次

showResult取決於'Spinner'已創建,並且在創建時被調用以初始化其自身,以及每次我的微調已被旋轉

我目前在中有,並在viewDidAppear()createSpinner()

的問題是在第一次發射中的數據在時間上不加載的createSpinner(),並且因此該應用程序看起來無用(因爲它尺寸取決於屏幕尺寸變化)。我該如何「等待」第一次同步,或者設置什麼來檢查是否有一些數據?

回答

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

我不得不使用self.syncData (),否則xcode抱怨 - 但否則它運作良好 - 謝謝 – Dan

+0

是的,我忘了這是因爲我寫代碼到瀏覽器不是xCode,你可以請標記答案爲正確的 –