gpt4 book ai didi

ios - 通过在 iOS 中连接表从 Firebase 获取数据

转载 作者:可可西里 更新时间:2023-11-01 03:51:07 25 4
gpt4 key购买 nike

我正在尝试从两个不同的 Firebase 表中获取数据。这是表的结构:

Post {
1{
pImages{
i1:true
i2:true
}
}
2{
pImages{
i3:true

}
}
}
Images{
i1{
iUrl : ....
pId : 1
}
i2{
iUrl :...
pId : 1
}
i3{
iUrl:....
pId : 2
}
}

我需要检索与 id = 1 的帖子对应的图像。以下是我检索图像的实现:

 func retrieveImagesForPost(postId: String,completion: (result: AnyObject?, error: NSError?)->()){
var imgArray:[Image]=[]
let postsRef = self.ref.child("post")
let imagesRef = self.ref.child("image")
let postImagesRef = postsRef.child(postId).child("pImages");
postImagesRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
for item in snapshot.children{
imagesRef.child(item.key).observeSingleEventOfType(.Value, withBlock: { (snap) in
let image = Image(snapshot: snap)
print(image)
imgArray.append(image)
})
}
print(snapshot.key)
print("called")
completion(result:imgArray, error:nil)
})
}

但是,问题是我无法将 imgArray 中的所有图像发送到 completion handler。以下是使用帖子 ID ==1 调用 retrieveImagesForPost 的输出。

pImages
called
<TestProject.Image: 0x7f9551e82000>
<TestProject.Image: 0x7f955466a150>

在调用完成处理程序 后检索图像。我尝试了 dispatch groupssemaphores 方法,如以下 post 中所述.但结果还是一样。如何让 completion handler 等待从 Firebase 获取所有图像?

最佳答案

保留一个计数器,随着每个图像的加载,该计数器会增加。一旦计数器达到 snapshot.children 列表的长度,您就完成了并调用您的完成处理程序。

let postImagesRef = postsRef.child(postId).child("pImages");
postImagesRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
var counter = 0
for item in snapshot.children{
imagesRef.child(item.key).observeSingleEventOfType(.Value, withBlock: { (snap) in
let image = Image(snapshot: snap)
print(image)
imgArray.append(image)
counter = counter + 1
if (counter == snapshot.childrenCount) {
completion(result:imgArray, error:nil)
}
})
}
})

您可能应该在上面添加一些错误处理,但总的来说,这种方法已经过尝试和测试。

关于ios - 通过在 iOS 中连接表从 Firebase 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38288161/

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