Firebase: iOS: после чтения firebase массив становится пустым - PullRequest
0 голосов
/ 29 апреля 2018

Я использую массив, хранящийся в структуре, для хранения записей из базы данных Firebase. Я успешно могу загрузить данные, так как могу распечатать каждый элемент базы данных. Тем не менее, массив с именем allMovies почему-то пуст, хотя я просто заполнил его данными из firebase.

Почему это происходит?

Вот мой код:

Глобальная структура, которая содержит мой массив и его изменения, видна во всей программе.

struct GlobalMovies {
    static var allMovies:[Movies] = []
    static var hotMovies:[Movies] = []
    static var upcomingMovies:[Movies] = []
}

Функциональность, которая читает данные из моей базы. Как упоминалось ранее, я успешно могу читать данные.

var ref:DatabaseReference?
var databaseHandle:DatabaseHandle?

databaseHandle = ref?.child("Movies").observe(.childAdded, with: { (snapshot) in
if let userDict = snapshot.value as? [String:Any] {

                GlobalMovies.allMovies.append(Movies(name: userDict["name"]! as! String ,
                                                     rating: userDict["rating"]! as! String,
                                                     length: userDict["length"]! as! String,
                                                     genre: userDict["genre"]! as! String ,
                                                     cast : userDict["cast"] as! [String],
                                                     cinemas : userDict["cinemas"] as! [String],
                                                     releaseDate: userDict["releaseDate"]! as! String,
                                                     director: userDict["director"]! as! String,
                                                     description: userDict["description"]! as! String ,
                                                     image: userDict["image"]! as! String,
                                                     isHot: userDict["isHot"]! as! Bool,
                                                     isUpcoming: userDict["isUpcoming"]! as! Bool))
                self.table.reloadData()


            }
        })
        print(GlobalMovies.allMovies.count)   //prints out 0 when it shouldn't

Мой файл json:

{
    "Movies": {
        "Movie1" : {
            "name": "The Incredible Hulk",
            "rating": "4/5",
            "length": "120 minutes",
            "genre": "Fantasy",
            "cast" : ["Lisa Simpson", "Peter Griffin"],
            "cinemas": ["A", "B"],
            "releaseDate": "12/05/2018",
            "director": "Mike Lancaster", 
            "description" : "Lorem Ipsum",
            "image": "default",
            "isHot": true,
            "isUpcoming": false
        },
        "Movie2" : {
            "name": "Star Wars",
            "rating": "5/5",
            "length": "120 minutes",
            "genre": "SciFi",
            "cast" : ["Lisa Simpson", "Peter Griffin"],
            "cinemas": ["A", "B"],
            "releaseDate": "12/05/2018",
            "director": "Mike Lancaster", 
            "description" : "Lorem Ipsum",
            "image": "default",
            "isHot": true,
            "isUpcoming": false
        }


    }
}

1 Ответ

0 голосов
/ 29 апреля 2018

Причина в том, что firebase извлекает данные асинхронно, поэтому, когда вы выполняете печать, они еще не извлекли данные, но через некоторое время они их получат. Что вам нужно сделать, это распечатать данные, когда выборка завершится

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