Если я не использую в tableview, загружаю функцию work, если я использую ее сбой

#ios #swift #firebase #firebase-realtime-database #swift3

#iOS #swift #firebase #firebase-realtime-database #swift3

Вопрос:

У меня проблема с наблюдением за данными из firebase, в основном у меня есть 2 наблюдателя, которые наблюдают за данными из Firebase.
Я извлекаю словари 2 типов, пользователей и сообщений.
Почтовый сервер работает правильно, но пользовательский не работает.
Когда я не использую in tableview, пользовательский работает правильно.
Вот сообщение :

     func downloadFirebasePostData(){
    DataService.ds.REF_POSTS.child(selectedTeamEnglish).child(postId).observeSingleEvent(of: .value,with: { (snapshot) in
        print("azat: entered in downloadfirebase post number (snapshot.childrenCount)")

        if let postDict = snapshot.value as? Dictionary<String,Any>{
            print("azat:entered in postdict")
            let post = Post(postKey: self.postId, postData: postDict)
            print("AZAT: POSTDICT in post (postDict["like"])")

            self.posts.insert(post, at: 0)
        }
        print("AZAT: Post count in postvc (self.posts.count)")
        self.tableView.reloadData()

    })
}
  

Функция downloadFirebasePostData () работает нормально, и я могу использовать ее в TableView. И вот пользовательский:

 func downloadUserData(){
    if let currentUser = FIRAuth.auth()?.currentUser{
        print("AZAT: download user data id (currentUser.uid))")

        DataService.ds.REF_USERS.child(currentUser.uid).observeSingleEvent(of: .value, with: {(snapshot) in
            print("AZAT: userdict is (snapshot.value)")
            if let userDict = snapshot.value as? Dictionary<String,Any>{
                print("AZAT: userdict is (snapshot.value)")
                let user = User(userData: userDict)
                self.users.insert(user, at: 0)
                print("AZAT: user count(self.users.count)")

            }
           self.tableView.reloadData()

        })

    }
}
  

Функция downloadUserData () не работает.
Я даже не вижу строку печати на консоли.

 print("AZAT: userdict is (snapshot.value)")
  

Я пытался не использовать в TableView массив users, и функция downloadUserData () работала нормально.
Я видел словарь на консоли. Раздел TableView является :

  if indexPath.section == 0 {

         let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell") as! PostCell
            cell.likeButton.tag = 0
            cell.likeButton.addTarget(self, action: #selector(PostVC.postLikePressed), for: .touchUpInside)
            cell.dislikeButton.tag = 0
            cell.dislikeButton.addTarget(self, action: #selector(PostVC.postDislikedPressed), for: .touchUpInside)
            print("AZAT: fillcell in dequeu section 0")
        if let img = PostVC.imageCache.object(forKey: users[0].profilePhoto as NSString){
            cell.fillCell(post: posts[0],img: img,user: users[0])
            return cell
        }else{
            cell.fillCell(post: posts[0],img: nil,user: users[0])
            return cell
        }
  

Итак, в основном я загружаю данные, помещаю их в массивы и обновляю пользовательский интерфейс в TableView. В консоли написано «неустранимая ошибка: индекс вне диапазона
«. Потому что в массиве users ничего нет.

Я не знаю, что я делаю не так.

Спасибо за помощь.

Комментарии:

1. В вашем вопросе указано, что код выходит из строя, но не указано, где. Можете ли вы обновить свой вопрос, добавив больше информации о сбое?

2. Кроме того, в функции dowloadUserData () выводится «AZAT: загрузить идентификатор пользовательских данных»?

3. Пожалуйста, обновите свой вопрос дополнительной информацией в соответствии с моими комментариями выше, чтобы мы могли предоставить решение.

4. Да, выводится «AZAT: загрузить идентификатор пользовательских данных». Но он не печатает «AZAT: userdict is (snapshot.value)», я обновил, добавив больше данных. Если вы хотите, я могу отправить вам проект. Это на github @Jay

5. Разместите ссылку, и я посмотрю.