gpt4 book ai didi

ios - 带有嵌套解析查询的 GCD

转载 作者:搜寻专家 更新时间:2023-11-01 07:33:25 24 4
gpt4 key购买 nike

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")

}
}
}
}
}

所以,我不确定我是否误解了调度组,但我的意图是针对不同的类进行两次解析查询,并根据提供的数据创建 TableViewCells。这工作正常,但由于我不希望在用户滚动表格时加载数据,我想预加载数据并创建单元格,并将它们存储在数组中。因为我想删除任何事件指示并重新加载表,所以在获取完成时我虽然(在谷歌搜索之后)调度组可能是一个很好的解决方案。但是,控制台中永远不会打印“全部完成”。

当我围绕外部查询创建一个调度组时(在查询之前进入组,并作为 block 中的最后一行离开)工作正常。我究竟做错了什么?嵌套异步调用的时候不能用这个吗?

仅供引用,我删除了很多代码,例如创建单元格和使用来自 Parse 的数据,因为我想让您免于阅读那些乱七八糟的东西。

最佳答案

这个调度组模式基本上是对的。

我建议在 dispatch_group_enterdispatch_group_leave 处记录一些消息,看看它是否像您认为的那样被调用,并且每个 enterleave 抵消。

如果 dispatch_group_leave 的出现次数少于调用 dispatch_group_enter 的次数,则不会调用 dispatch_group_notify block 。

也许您在内部 findObjectsInBackgroundWithBlock 闭包中有一些路径阻止它触发 dispatch_group_leave 调用。

关于ios - 带有嵌套解析查询的 GCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com