gpt4 book ai didi

Swift 为什么从 Parse 检索数据时我必须按两次按钮才能在 tableview 中加载数据

转载 作者:行者123 更新时间:2023-11-28 15:55:07 25 4
gpt4 key购买 nike

下面是我的代码,它从 Parse 服务器类中检索图像并将其加载到 TableView 中。当我按 GetAlbum UIbutton 显示数据时,我必须按两次才能成功在表格 View 中显示数据,我不知道是什么原因。请帮忙(PS:我是swift的新手)

var Saveddata: [UIImage] = []

@IBAction func getAlbum(_ sender: AnyObject) {
if (self.textEntercode.text == "")
{
let alert = UIAlertController(title: "No Entered value", message: "Please enter value", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil));
//event handler with closure

present(alert, animated: true, completion: nil);
}
else {
//-------------Get Data from Parse Server-------------------
var photo = textEntercode.text
let query = PFQuery(className: "Photostable10")

query.whereKey("photo", equalTo: photo)
//query.whereKey("Score", greaterThan: 1000)

query.findObjectsInBackground(block: { (objects : [PFObject]?, error: Error?) -> Void in
if error == nil {
for object in objects! {
if let userPicture = object.value(forKey: "photo") {
let userPicture = object.value(forKey: "photo")! as! PFFile
userPicture.getDataInBackground({ (imageData: Data?, error: Error?) -> Void in
let image = UIImage(data: imageData!)
if image != nil {
self.Saveddata.append(image!)
}
})
}
}
}
})
self.tableview.reloadData()
} //else close
}

func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell")!

cell.textLabel!.text = "Post"
cell.imageView?.image = Saveddata[indexPath.row]
return cell

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.Saveddata.count
}

最佳答案

您对 self.tableView.reloadData() 的调用在错误的位置,并且是从错误的队列中调用的。您需要在主队列上调用它,并且需要在更新数据模型后在查询完成处理程序中调用它。

query.findObjectsInBackground(block: { (objects : [PFObject]?, error: Error?) -> Void in
if error == nil {
for object in objects! {
if let userPicture = object.value(forKey: "photo") {
let userPicture = object.value(forKey: "photo")! as! PFFile
userPicture.getDataInBackground({ (imageData: Data?, error: Error?) -> Void in
let image = UIImage(data: imageData!)
if image != nil {
self.Saveddata.append(image!)
}
})
}
}
DispatchQueue.main.async {
self.tableview.reloadData()
}
}
})

关于Swift 为什么从 Parse 检索数据时我必须按两次按钮才能在 tableview 中加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41901463/

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