将图像从解析加载到Collection View Swift

时间:2017-04-23 11:22:33

标签: ios swift parse-platform

我想获得一些如何解决问题的建议。我想将存储在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)
                        }
                    })
                }

但是当我在程序中使用修复图像并将其存储在数组(注释中的代码)中时,我可以在我的集合视图中看到这些图像... 有人可以帮我解决这个问题吗?万分感谢。

约迪。

1 个答案:

答案 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