Массив не обновляется в Swift - PullRequest
0 голосов

Когда вы запускаете приложение, вы должны получить строку из документов Firestore и записать в массив, (Массив)

    var items = [String]()
override func viewDidLoad() {
        let db = Firestore.firestore()
        db.collection("cities").getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in querySnapshot!.documents {
                    print("\(document.documentID) => \(document.data())")
                    self.items.append(document.data()["title"] as! String)
                }
            }
        }

    }

затем в функции создания ячейки текст должен быть заменен на строку из массива.

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! colCell
        print(self.items)
        cell.myLabel.text = self.items[indexPath.item]

        return cell
    }

Но массив со строками из хранилища не обновляется в функции создания ячейки. Почему?

(Я распечатал массив в viewDidLoad и в ячейке, он обновлен в viewDidLoad и не обновлен в ячейке)

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Вам необходимо перезагрузить collectionView, поскольку вызов Firestore является асинхронным

for document in querySnapshot!.documents {
   print("\(document.documentID) => \(document.data())")
   self.items.append(document.data()["title"] as! String)
}
self.collectionView.reloadData()
0 голосов
/ 25 марта 2019

Вы можете перезагрузить данную ячейку после обновления даты следующим образом:

collectionView.reloadItemsAtIndexPaths(arrayOfIndexPaths)

это оптимизированный способ обновления UICollectionView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...