在Swift和Firebase中使用.childAdded的多个值

时间:2018-02-10 20:59:33

标签: ios swift firebase firebase-realtime-database

我正在尝试在我的应用中编写通知系统。为了简单地解释我的问题,让我们说当用户喜欢图片时,Firebase中有一个新的通知子项。如果同一个用户不同于图片,则删除该孩子。

数据库结构如下:

|
| Notification
|   |_UserID (the one who received the notification)
|   |  |__NotificationID
|   |  |  |_from: UserID (the one who sent the notification)
|   |  |  |_notViewed: false
|   |  |  |_objectId: "-L5-C7nnEji4tNeJp3Ca"
|   |  |  |_timestamp: 1518286167
|   |  |  |_type: "like"

我的想法是观察根Notification / CurrentUser中的所有通知:

func observeNotification(withId id: String, completion: @escaping (Notificationm) -> Void) {
          REF_NOTIFICATION.child(id).observe(.childAdded) { (snapshot) in

                if let dict = snapshot.value as? [String: Any] {
                   let newNotif = Notificationm.transformNotification(dict: dict, key: snapshot.key)

                   completion(newNotif)

                }
          }
}

然后,在ViewController中:

func loadNotifications(){
    Api.Notification.observeNotification(withId: currentUser.uid) { (notification) in
       print(notification.id)
    }
}

我的问题很简单,但我真的不明白原因:

  • 如果使用复习功能调用函数loadNotifications(),一切都还可以

  • 如果数据库发生变化(例如,有新通知),一切都会成倍增加!同样的通知可以打印2,3,4等等!我真的不明白为什么。

如果我使用其他帐户,喜欢和不同于我的照片。我可以看到:

  • 第一次,通知显示3次
  • 第二次 - > 6次
  • 第三次 - > 9次

它可以影响其他通知,可以显示2到4次。

我是斯威夫特的新手,真的输了。

0 个答案:

没有答案