您有幾個選項,但問題是由於異步調用。
解析是否顯示相同的函數,並帶有完成塊?
如果是,則將Bool的處理放置在Completlion塊中,這將在異步任務完成時調用。
如果沒有,我懷疑,你可以創建一個NSOperationQueue,以1:1的maxConcurrency(所以它是串行)與
func addOperationWithBlock(_ block:() -> Void)
這就是所謂的調度呼叫到隊列隊列。您需要全局存儲成功布爾值,以便您可以在第二個排隊塊操作中訪問它,以檢查成功狀態。
更新:
我還沒有使用解析,但檢查findObjectsInBackgroundWithBlock(https://parse.com/docs/ios/guide#queries)的文檔需要完成塊,你可以處理結果,更新您的布爾。
林不知道你在做什麼。您不需要具有查詢的成功狀態。你可以檢查
if (!error) {
// do stuff
} else {
//error occured - print("error \(error.localizedDescription)"
}
檢查示例。
你需要了解的是線程。異步任務提供了一個完成塊,因爲它的異步,它被分派到另一個線程進行處理。我不確定你知道多少線程,但有一個叫做線程池的東西。此線程池由隊列訪問。線程池由OS管理,並確保可用線程可供需要完成工作的隊列使用。當用戶與應用交互時,這個(以及所有的UI工作)在主線程上完成。
因此,無論何時某些處理將干擾可能的交互或UI更新,都應該在主線程之外調度(Grand Central Dispatch)或排隊(NSOperationQueue,構建於GCD之上)。
無論如何,這就是爲什麼findObjectsInBackgroundWithBlock
調用派發的主線程,因爲否則它會阻止主線程,直到它完成,破壞用戶的體驗。另外,如果主線程被阻塞超過1分鐘(最後一次檢查),操作系統的監視程序將會終止進程。
所以是,分配一個布爾值到塊的返回,將得到該函數的返回,該操作在完成塊完成之前發生。完成塊是你在函數完成後編寫一些東西的地方。因此,queury被派發到另一個線程並開始處理,發送這個工作以供處理的線程繼續執行其餘的部分。所以直接檢查布爾值,不會工作,因爲另一個線程不完整。即使其他線程及時完成,將後臺線程與主線程連接起來是什麼?
這是塊(功能指針)的美麗,它是一個更清潔和優化,並保持代碼緊湊。舊的方式,仍然是用於一些較舊的框架,委託,它將調用代碼與回調分離並添加委託依賴。積木很漂亮。
它也很重要,要注意完成塊不總是在主線程上調用。在許多情況下,由您決定將工作分派回主線程,以處理完成塊中可用對象需要完成的任何UI工作。
你有沒有試過把這個函數放到'viewDidLoad'? – Korpel
是parseQuery()你創建的函數嗎?這不是在解析API – Steve
讓我猜 - 功能是異步? – luk2302