#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. Разместите ссылку, и я посмотрю.