簡體   English   中英

GCD具有嵌套的解析查詢

[英]GCD with nested Parse Queries

func getPosts(skip: Int){
    var query = PFQuery(className: self.parseClassName!)
    query.includeKey("posted_by")
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil && objects != nil {
            if let objects = objects as? [PFObject] {

                var requestGroup = dispatch_group_create()

                for post in objects
                {
                    dispatch_group_enter(requestGroup)
                    let queryKommentar1 = PFQuery(className:"Comment")
                    queryKommentar1.whereKey("posted_to", equalTo: post)
                    queryKommentar1.limit = 3
                    queryKommentar1.includeKey("written_by")
                    queryKommentar1.findObjectsInBackgroundWithBlock() {
                        (commentObjects: [AnyObject]?, error: NSError?) -> Void in

                      //Creating UITableViewCells from data and store in array 
                      dispatch_group_leave(requestGroup)

                    }   
                }

                println("Successfully retrieved \(objects.count) posts.")
                dispatch_group_notify(requestGroup, dispatch_get_main_queue()) {
                    println("All done")

                }  
            }
        }
    }
}

因此,我不確定是否誤解了調度組,但我的意圖是進行兩個針對不同類的Parse查詢,並根據提供的數據創建TableViewCells。 這很好用,但是由於我不希望在用戶滾動表時加載數據,因此我想預加載數據並創建單元格,然后將它們存儲在Array中。 由於我想刪除任何活動指示,並重新加載表,因此在獲取完成之前,我(在som Googleing之后)認為調度組可能是一個很好的解決方案。 但是,“所有完成”永遠不會在控制台中打印。

當我圍繞外部查詢創建一個調度組(在查詢之前進入該組,並在代碼塊的最后一行保留)時,它運行良好。 我究竟做錯了什么? 嵌套異步調用時不可能使用此功能嗎?

僅供參考,我刪除了很多代碼,例如創建單元格並使用了Parse中的數據,因為我想避免您閱讀這些混亂的信息。

這種調度組模式基本上是正確的。

我建議將一些消息記錄在dispatch_group_enterdispatch_group_leave ,看看它是否像您認為的那樣被調用,並且每個enter都被leave抵消。

如果dispatch_group_leave的出現次數小於對dispatch_group_enter的調用次數,則不會調用dispatch_group_notify塊。

也許您在內部的findObjectsInBackgroundWithBlock閉包中有一條路徑,阻止了它到達dispatch_group_leave調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM