gpt4 book ai didi

ios - 无法填充到 UITableView Swift

转载 作者:行者123 更新时间:2023-11-28 12:39:13 25 4
gpt4 key购买 nike

我试着看看我是否遗漏了一些代码,但也许我没有看到错误

其他一切都已正确连接和设置。但是我不明白为什么我不能填充 UITableView

但我不确定为什么它不传递数据。想法?

func getLocalComments(point:PFGeoPoint){
var temp = [CommentDetails]()
DispatchQueue.global(qos: .background).async {
let qComments = PFQuery(className: "UserCommentary")
let qDrinks = PFQuery(className: "venueDrinks")
if self.type == "House Parties"{
//Query the bars
qDrinks.whereKey("venueName", equalTo: self.id)
qDrinks.whereKey("venueID", equalTo: self.venueName)
qDrinks.addDescendingOrder("createdAt")

qComments.whereKey("venueID", equalTo: self.id)
qComments.whereKey("venueName", equalTo: self.venueName)

do{
var comment:CommentDetails = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0)
let qReply1 = try qDrinks.findObjects()
if qReply1.count>0{
var i = 0
while i < 2 {
let item = qReply1[i]
print(item)
comment.cellType = 2
i+=1
}
//temp.append(comment)
}
comment = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0)
let qReply2 = try qComments.findObjects()
for item in qReply2{
comment.commentOwner = item.object(forKey: "owner") as! String
comment.comment = item.object(forKey: "comment") as! String
comment.isFile = item.object(forKey: "image") as! Bool
if comment.isFile {
let dataPhoto:PFFile = item.object(forKey: "imgFile") as! PFFile
let imageData:NSData = try dataPhoto.getData()
let image:UIImage = UIImage(data:imageData as Data)!
comment.imageFile = image
comment.cellType = 2
}
temp.append(comment)

}
print("Comment",temp)

}
catch{
print(error)
}
}
}
DispatchQueue.main.async {
print(temp)
self.commentList.removeAll()
self.commentList = temp
print("Comment",self.commentList)
self.commentTableView.reloadData()

}

}

最佳答案

你需要在后台线程结束时回到主线程。检查何时调用 DispatchQueue.main.async 方法。

    func getLocalComments(point:PFGeoPoint){
var temp = [CommentDetails]()
DispatchQueue.global(qos: .background).async {
let qComments = PFQuery(className: "UserCommentary")
let qDrinks = PFQuery(className: "venueDrinks")
if self.type == "House Parties"{
//Query the bars
qDrinks.whereKey("venueName", equalTo: self.id)
qDrinks.whereKey("venueID", equalTo: self.venueName)
qDrinks.addDescendingOrder("createdAt")

qComments.whereKey("venueID", equalTo: self.id)
qComments.whereKey("venueName", equalTo: self.venueName)

do{
var comment:CommentDetails = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0)
let qReply1 = try qDrinks.findObjects()
if qReply1.count>0{
var i = 0
while i < 2 {
let item = qReply1[i]
print(item)
comment.cellType = 2
i+=1
}
//temp.append(comment)
}
comment = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0)
let qReply2 = try qComments.findObjects()
for item in qReply2{
comment.commentOwner = item.object(forKey: "owner") as! String
comment.comment = item.object(forKey: "comment") as! String
comment.isFile = item.object(forKey: "image") as! Bool
if comment.isFile {
let dataPhoto:PFFile = item.object(forKey: "imgFile") as! PFFile
let imageData:NSData = try dataPhoto.getData()
let image:UIImage = UIImage(data:imageData as Data)!
comment.imageFile = image
comment.cellType = 2
}
temp.append(comment)

}
print("Comment",temp)
DispatchQueue.main.async {
print(temp)
self.commentList.removeAll()
self.commentList = temp
print("Comment",self.commentList)
self.commentTableView.reloadData()

}
}
catch{
print(error)
}
}
}
}

好的,那到底发生了什么?您知道当您创建异步后台线程时,它会与主线程一起执行。因此,如果您在后台线程和主线程中设置断点,您会注意到主线程可能首先启动。

在您的情况下,DispatchQueue.main.async 在后台线程填充临时数组之前执行。当您将 block 移动到 DispatchQueue.global(qos: .background).async block 内部时,它将在需要时在主线程中执行。

一句话,不是从上到下执行的!

关于ios - 无法填充到 UITableView Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39927967/

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