2015-10-26 167 views
0

我有一個collectionview,我有一個連接到解析的字符串username的數組,但是當我運行該程序時collectionview不顯示任何東西。我通過在數組中手動​​輸入值來對它進行硬編碼,並且它工作正常,但是一旦從解析中檢索字符串,它就不起作用。我該如何解決?爲什麼沒有顯示在collectionView上?

var arrayOfFriendsNames = [String]() 
var arrayOfFriendsTest: [String] = ["fire.png, fire.png, fire.png"] 
override func viewDidLoad() { 
    super.viewDidLoad() 

    var query = PFQuery(className: "_User") 
    query.findObjectsInBackgroundWithBlock({ 
     (objects: [AnyObject]?, error: NSError?) -> Void in 
     var objectIDs = objects as! [PFObject] 

     for i in 0...objectIDs.count-1{ 
      self.arrayOfFriendsNames.append(objectIDs[i].valueForKey("username") as! String) 
      print(self.arrayOfFriendsNames) 
     } 
    }) 
self.collectionView.reloadData() 
} 
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return arrayOfFriendsNames.count 
} 
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell: friendcellView = collectionView.dequeueReusableCellWithReuseIdentifier("friendcell", forIndexPath: indexPath) as! friendcellView 


    cell.friendname.text = arrayOfFriendsNames[indexPath.row] 
    cell.friendpic.image = UIImage(named: arrayOfFriendsTest[indexPath.row]) 
    cell.friendpic.layer.cornerRadius = cell.friendpic.frame.size.width/2; 
    cell.friendpic.clipsToBounds = true 

    return cell 
} 
+0

設置數據源和代表collectionview的。 – pkc456

+0

我已經完成了。 – xxtmanxx

回答

0

嘗試從DB

重裝完成後,獲得的數據
query.findObjectsInBackgroundWithBlock({ 
     (objects: [AnyObject]?, error: NSError?) -> Void in 
     var objectIDs = objects as! [PFObject] 

     for i in 0...objectIDs.count-1{ 
      self.arrayOfFriendsNames.append(objectIDs[i].valueForKey("username") as! String) 
      print(self.arrayOfFriendsNames) 
     } 

     dispatch_async(dispatch_get_main_queue()) { 
      self.collectionView.reloadData() 
     } 

    }) 
0

確保你在你的UICollectionView實例調用reloadData方法,當你從Parse完成加載數據。如果是,請檢查您的約束UICollectionView並確保它們是正確的。另一種可能性是Parse不會向您的代碼返回任何數據,因此請確保您的數組中包含有效數據。

您的代碼問題是您撥打self.collectionView.reloadData()的地方。你需要調用它的findObjectsInBackgroundWithBlock

query.findObjectsInBackgroundWithBlock({ 
    (objects: [AnyObject]?, error: NSError?) -> Void in 
    var objectIDs = objects as! [PFObject] 

    for i in 0...objectIDs.count-1{ 
     self.arrayOfFriendsNames.append(objectIDs[i].valueForKey("username") as! String) 
     print(self.arrayOfFriendsNames) 
    } 
    NSOperationQueue.mainQueue().addOperationWithBlock {() -> Void in 
     self.collectionView.reloadData() 
    } 
}) 

裏面你還可以使用GCD方式作爲@anhtu回答

+0

當你在'collectionView:numberOfItemsInSection:'上放置一個斷點時,它會被調用嗎?如果是,'arrayOfFriendsNames.count'的值是什麼? – manman

+0

arrayOfFriendsNames被填充,它對應於解析數據庫,但是當我放置斷點時,arrayOfFriendsNames不會出現在控制檯中。 – xxtmanxx