2017-04-23 80 views
1

我想獲得一些建議如何解決問題。我想存儲的解析服務器上的圖像加載到我的收藏觀,我使用下面的代碼:從解析加載圖像到集合視圖Swift

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")不打印,所以我應該有什麼錯在這裏和這就是爲什麼我的應用程序犯規負荷東西:

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) 
         } 
        }) 
       } 

但是,當我在我的程序中使用修復的圖像,並且我存儲在一個Array(評論中的代碼)中時,我可以在我的收藏視圖中看到這些圖像... 有人可以幫助我解決此問題嗎?太感謝了。

Jordy。

+0

嘗試在數據到達後重新載入集合視圖,嘗試爲您的集合視圖取出插座並在for循環後執行collectionview.realodData()。 – Hosny

+0

是的,發生在我身上,嘗試清理項目,或寫@IBOutlet var outletOfCollectionView:UICollectionView!然後將其附加到集合視圖控件 – Hosny

+0

嘿,感謝您的回答,我得到了同樣的東西,我認爲這就像循環有問題,因爲它不會進入for循環...當我想要打印(打印(「IN FOR」))它不出現在控制檯中。 – Jordy

回答

1

User類是內置類解析和國內被命名爲_User(帶下劃線),所以您的查詢應該是這樣的:

var query2 = PFQuery(className: "_User") 

,或者更緊湊:

var query2 = PFUser.query() 

編輯

獲取用戶和他們的照片後,你需要重新加載集合視圖,使其意識到新數據;因爲你是在後臺隊列時發生這種情況,你必須派遣到主隊列這樣做:

for object in objects! { 
    // ... 
} 
DispatchQueue.main.async { 
    self.collectionView.reloadData() 
}  

然而,我沒有看到你的代碼UICollectionView;你只能實現委託和數據源協議。你最好應該劃分UICollectionViewController而不是UIViewController

+0

謝謝,我for循環現在工作,但它不顯示圖像,我必須指定用戶classname中列的名稱?因爲我我想我在這裏做:let thumbNail = object [「image」] as!PFFile – Jordy

+0

我編輯了我的答案來解決這個問題,請看看... –

+0

一個胖胖的巨大感謝:)它的工作:) – Jordy

相關問題