在我的iOS應用程序中,我需要通過使用PFObject
查詢來檢索一些值。當這些都加載時,應用程序應該繼續做更多的東西。Parse.com查詢和應用程序設計問題:在主線程上執行長時間運行的操作
func processTransaction(){
.. some code to prepare my 2 queries
var balance1 = balance1Query.getFirstObject() as PFObject;
var balance2 = balance2Query.getFirstObject() as PFObject;
.. after these are loaded i have to update them, and 'release' the screen to the user.
}
現在,使用這種方法.getFirstObject()
的時候,我得到了我的的Xcode調試窗口說一個警告:
長期運行的操作被主線程上執行。
當然,我做了一些研究,每一個答案,我閱讀有關使用 getObjectInBackgroundWithId
,然後移到這些查詢的執行的背景會談(我猜它這樣做使他們在一個新的線程。)
但我的問題是,在代碼繼續使用這些對象之前,我應該如何構造我的代碼/設計,以確保兩個對象都已加載?
我嘗試了一些東西,創造像下面一些代碼,但我感覺這是不正確的方法。當我不得不加載並確保加載4或5個對象時,無法想象這會變成什麼樣子。
balanceQuery1.getFirstObjectInBackgroundWithBlock{
(balance1: PFObject!, error1: NSError!) -> Void in
if error1 == nil {
balanceQuery2.getFirstObjectInBackgroundWithBlock{
(balance2: PFObject!, error2: NSError!) -> Void in
if error2 == nil {
... processing here..
}
}
}
不,這是正確的做法。只要記住派發任何代碼,將您的UI更新回主隊列。對於balanceQuery2,您可以使用getFirstObject,因爲您已經離開主隊列 – Paulw11 2014-11-02 20:51:58
嗯..好的。感謝您的回覆。但是,我還在想,除了嵌套,嵌套和嵌套之外,沒有別的辦法嗎?在.NET中我有等待,我可以鏈任務(http://msdn.microsoft.com/en-us/library/dd537610(v=vs.110).aspx)。在iOS/Swift中沒有類似的東西嗎? – Tys 2014-11-02 22:20:48