2016-11-16 24 views
1

一切正常,直到用户注销并再次登录。似乎Firebase观察方法被称为两次。我试图在viewDidDisssaper中使用removeAllObservers,并用句柄移除Observer,但它没有帮助。我仍然得到重复的数据。我还能尝试什么?也许我的查询是错误的?但随后它会显示错误的结果在一开始..用户再次登录后重复数组中的数据Firebase观察方法

这里是我使用的是什么:

let ref = FIRDatabase.database().reference().child("Recent") 

func observeRecent() { 
     ref.queryOrdered(byChild: "sender_id").queryEqual(toValue: senderId()).observe(.value, with: { snapshot in 

      Chats_VC.activeConversations.removeAll() 
      for snap in snapshot.value as? [String: AnyObject] ?? [:] { 
       let data = FIRDatabase.database().reference().child("Recent").child(snap.key) 
       data.observeSingleEvent(of: .value, with: { snapshot in 
        let dict = snapshot.value as? [String: AnyObject] ?? [:] 
        let activeSnapshot = Recent() 
        //.... 
        Chats_VC.activeConversations.append(activeSnapshot) 
        self.tableView.reloadData() 
       }) 
      } 
     }) 
     } 
+0

@Hibernia似乎有一个类似的问题,你http://stackoverflow.com/questions/40699325/firebase-observer-code-running-twice-after-leaving-查看 就像我在那里发表评论,我不知道这是否可以帮助你,但我遭受了这种重复,而且因为'.value'。有了一个听众,它在开始时被调用,然后每次我添加一些数据,再次... – Anfuca

+0

嗯,我需要那个.value,因为我正在观察对话中的最后一条消息。 –

+0

如果您只想检索添加的每个新请求的数据,请尝试'child_added'而不是'value'。 – Anfuca

回答

0

找不到任何相关的答案。所以我只是检查阵列的重复和删除任何重复

相关问题