Обновить TableView с данными Array - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть PFQuery in viewDidLoad, называемый getUserPicPostData. Выходные данные показывают, что в массиве есть 3 изображения.

ViewdidLoad:

func getUserPicPostData() {
    let query = PFQuery(className: "PicPost")
    query.whereKey("Username", equalTo: usernameSelected)
    query.findObjectsInBackground(block: { (objects: [PFObject]?,error: Error?) in
        if let objects = objects {
            for object in objects {
                self.picLikeArray.append(object["UserLikes"] as! Int)
                self.picTimeArray.append(object["UserTime"] as! String)
                self.picObjectIdArray.append(object.objectId!)

                let userImageFile = object["ImageFile"] as? PFFileObject

                userImageFile?.getDataInBackground(block: { (imageData: Data?, error: Error?) in
                    if error == nil {
                        self.picPostArray.append(UIImage(data: imageData!)!) 
                        print(self.picPostArray.count)
                    } 
                    else {
                        print(error)
                    }
                })
            } 
        }
    })
}

Затем я хочу сказать своим ячейкам принять входные данные из imageArray. PicPostArray теперь равен nil ??

cellForRowAtIndexPath:

print(picPostArray)
cell.imageView1.imageView!.image = picPostArray[0]
cell.imageView2.imageView!.image = picPostArray[1]
cell.imageView3.imageView!.image = picPostArray[2]

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Просто перезагрузите tableView после добавления изображения в список.

picPostArray Инициализация будет

var picPostArray:[UIImage] = [] // picPostArray not nil 

И затем перезагрузите tableView, когда изображение установлено в массиве.

self.picPostArray.append(UIImage(data: imageData!)!) 
self.tableView.reloadData()

Из-за асинхронного запроса вам необходимо перезагрузить tableView.

Надеюсь, это решит эту проблему.

0 голосов
/ 04 ноября 2019

Когда вы перезагружаете таблицу, ваш picPostArray равен нулю, потому что он еще не установлен. Это связано с вашей асинхронностью query.findObjectsInBackground. Чтобы решить эту проблему, вы можете перезагрузить таблицу, только если установлено picPostArray:

var picPostArray: [UIImage] = [] {
    didSet {
        yourTableView.reloadData()
    }
}
...