为什么没有任何内容出现在collectionView上?

时间:2015-10-26 02:43:48

标签: ios swift uicollectionview

我有一个collectionview,我有一个带有字符串用户名的数组,它连接到parse,但是当我运行程序时,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
}

2 个答案:

答案 0 :(得分:0)

完成从reloadData加载数据后,请务必在UICollectionView实例上调用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回答

答案 1 :(得分: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() 
        }

    })