表格有时会加载,有时会崩溃

时间:2015-09-10 02:55:24

标签: ios swift uitableview parse-platform

所以我从解析中下载一些图像,然后将它们显示在一个表格中,但有时它会崩溃,有时会崩溃。

1)下载当前用户关注的所有用户名,然后......

2)从解析中下载文件(PFFile),根据发布的时间将其转换为图像。然后,当用户向下滚动或用户查看旧帖子时,表格将填充。

问题在于,有时它会崩溃,有时它会工作并在向下滚动时加载每个图像。我不确定发生了什么,但我认为用户所关注的名单列表并没有全部下载(崩溃),有时它确实下载(工作正常)。这是我的猜测。

错误:"致命错误:数组索引超出范围"

1)下载用户列表:当" Feed"单击按钮

func getFollowingData() { 
    var followQuery = PFQuery(className: "follow") 

    followQuery.whereKey("user", equalTo: PFUser.currentUser()!.username!)
    followQuery.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in
        if error == nil {
            if let objs = objects {
                for name in objs {
                   self.followArray.append(name.objectForKey("userToFollow") as! String)
                }
                self.storedFollowArray = self.followArray
                self.loadFollowersImages()
            }
        }
    }
}

2)下载用户帖子(姓名和图片)

func loadFollowersImages(){ //downloading posts of people we are following

    photoQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
        if error == nil {
            for object in objects!{

                //username of post
                self.resultsHasNameArray.append(object.objectForKey("username") as! String)
               //Images of post                                    
                var userPicsImageDataToDownload = object["userImageFile"] as! PFFile
                userPicsImageDataToDownload.getDataInBackgroundWithBlock({ (userPicData: NSData?, error: NSError?) -> Void in
                    if error == nil {
                        if let userPic = UIImage(data: userPicData!){
                            self.masterUserPicsArray.append(userPic)
                            self.resultsTable.reloadData()
                        }
                    }
                })                    
            }
        }
    }
}

在表格中显示:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    //....configure cell

    cell.usernameLbl.text = self.resultsHasNameArray[indexPath.row] // works

    cell.mainDrawView.image = masterUserPicsArray[indexPath.row] // Crashes and sometimes it works

}

不确定发生了什么。这有发生在其他人身上吗?消除此错误的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

尝试在dispatch_sync

中包装表的重载
dispatch_sync(dispatch_get_main_queue(), { Void in
  self.masterUserPicsArray.append(userPic)
  self.resultsTable.reloadData()
});

编辑:

哪个数组是基于表视图的行数?如果resultsHasNameArray和masterUserPicsArray独立更新,那么确定表中要显示的行数可能会出现问题