Добрый вечер, я пытался получить информацию о пользователях из firebase для публикации на tableViewController, очень похожем на ленту уведомлений Instagram.Я застрял в этом вопросе в течение некоторого времени, и мне действительно трудно понять его.Я задавал этот вопрос здесь ранее, но я до сих пор не нашел решения.
Я постараюсь объяснить свой код как можно больше в надежде найти решение.
Ниже показано, как я сохраняю данные в firebase.
![Here is how my data is saved in firebase.](https://i.stack.imgur.com/WdH4e.png)
вот расширение моей базы данных
extension Database {
static func fetchPoster(with uid: String, completion: @escaping(Poster) -> ()) {
USER_REF.child(uid).observeSingleEvent(of: .value) { (snapshot) in
guard let dictionary = snapshot.value as? Dictionary<String, AnyObject> else { return }
let poster = Poster(dictionary: dictionary)
completion(poster)
}
}
static func fetchUser(with postId: String, completion: @escaping(User) -> ()) {
USER_REF.child(postId).observeSingleEvent(of: .value) { (snapshot) in
guard let dictionary = snapshot.value as? Dictionary<String, AnyObject> else { return }
guard let ownerUid = dictionary["fromId"] as? String else { return }
Database.fetchUser(with: ownerUid, completion: { (user) in
let user = User(dictionary: dictionary)
// let user = User(postId: postId, user: user, dictionary: dictionary)
completion(user)
})
}
}
}
ниже, как я планирую вызывать информацию из firebaseсохранить на мои уведомления ViewController.
var notifications = [userNotifications]()
override func viewDidLoad() {
super.viewDidLoad()
fetchNotifications()
}
func fetchNotifications() {
guard let currentUID = Auth.auth().currentUser?.uid else { return }
USER_SWIPES_REF.child(currentUID).observe(.value) { (snapshot) in
print(snapshot)
guard let dictionary = snapshot.value as? Dictionary<String, AnyObject> else { return }
guard let uid = dictionary["userSwipeId"] as? String else { return }
Database.fetchUser(with: uid, completion: { (user) in
if let postId = dictionary["fromId"] as? String {
Database.fetchPoster(with: postId, completion: { (poster) in
let notification = userNotifications(poster: poster, dictionary: dictionary)
self.notifications.append(notification)
self.tableView.reloadData()
})
}
})
}
}
И последнее, но не менее важное: вот мои структуры для пользователя и автора
// poster
init(dictionary: [String: Any]) {
self.cost = dictionary["price"] as? String ?? ""
self.description = dictionary["description"] as? String
self.category = dictionary["category"] as? String ?? ""
self.imageUrl1 = dictionary["imageUrl1"] as? String ?? ""
self.imageUrl2 = dictionary["imageUrl2"] as? String
self.imageUrl3 = dictionary["imageUrl3"] as? String
self.fromId = dictionary["fromId"] as? String ?? ""
}
// user
init(dictionary: [String: AnyObject]) {
self.number = dictionary["phonenumber"] as? String
self.id = dictionary["uid"] as? String
self.name = dictionary["name"] as? String
self.email = dictionary["email"] as? String
}
В моем уведомлении ViewController я публикую набор фиктивных данных, поэтому в numberOfRowsInsection будет возвращено сообщение «Пустой пользователь пролистал ваше сообщение» в зависимости от того, сколько пользователей пролистало.когда я устанавливаю возврат 5, он возвращает 5 фиктивных данных.В моей консоли я вижу оператор печати из firebase, показывающий, сколько пользователей прошло.Однако, когда я нажимаю на сам viewController, он просто пуст.Буду очень признателен, если кто-нибудь сможет мне помочь.