我想获得一些如何解决问题的建议。我想将存储在Parse Server上的图像加载到我的集合View中,我使用以下代码:
import UIKit
import Parse
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
//var my_array:[String] = []
//var my_array: [String] = [String]()
var imageResources : Array<UIImage> = []
//var query = PFQuery(className: "User")
var query2 = PFQuery(className: "User")
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//my_array = ["montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg"]
query2.findObjectsInBackground{ (objects: [PFObject]?, error: Error?) -> Void in
if error == nil {
print("OK")
for object in objects! {
print("IN FOR")
let thumbNail = object["image"] as! PFFile
thumbNail.getDataInBackground({
(imageData: Data?, error: Error?) -> Void in
if (error == nil) {
print("IN SECOND IF")
let image = UIImage(data:imageData!)
self.imageResources.append(image!)
//let size = self.imageResources.count
//print(size)
}
})
}
}
}
//query.findObjectsInBackground{ (objects: [PFObject]?, error: Error?) -> Void in
// if error == nil {
// for object in objects! {
// self.my_array.append(object.object(forKey: "image") as! String)
// }
// }
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return imageResources.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
cell.ImageView?.image = imageResources[indexPath.row]
return cell
}
}
我在运行应用程序时没有任何错误,但是我不能在收集视图中的应用程序上获取图像。该图像位于我的解析服务器中:Parser Server Interface
我刚才发现在这段代码中,打印print("IN FOR")
没有打印,所以我觉得这里有问题,这就是为什么我的App没有加载任何东西:
query2.findObjectsInBackground{ (objects: [PFObject]?, error: Error?) -> Void in
if error == nil {
print("OK")
for object in objects! {
print("IN FOR")
let thumbNail = object["image"] as! PFFile
thumbNail.getDataInBackground({
(imageData: Data?, error: Error?) -> Void in
if (error == nil) {
print("IN SECOND IF")
let image = UIImage(data:imageData!)
self.imageResources.append(image!)
//let size = self.imageResources.count
//print(size)
}
})
}
但是当我在程序中使用修复图像并将其存储在数组(注释中的代码)中时,我可以在我的集合视图中看到这些图像... 有人可以帮我解决这个问题吗?万分感谢。
约迪。
答案 0 :(得分:1)
User类是一个内置的Parse类,内部名为_User
(带下划线),因此您的查询应如下所示:
var query2 = PFQuery(className: "_User")
或更紧凑:
var query2 = PFUser.query()
修改强>
获取用户及其图像后,您必须重新加载集合视图以使其了解新数据;并且由于在发生这种情况时您处于后台队列,因此您必须调度到主队列才能执行此操作:
for object in objects! {
// ...
}
DispatchQueue.main.async {
self.collectionView.reloadData()
}
然而,我在代码中看不到UICollectionView
;您只实现委托和数据源协议。你最好应该只是UICollectionViewController
而不是UIViewController
。