【问题标题】:Swift & Firebase - Call a function after ObserveSwift & Firebase - 在观察后调用一个函数
【发布时间】:2018-08-31 23:30:09
【问题描述】:

我正在编写一个聊天应用程序。我想在观察功能之后更新 tableViewController:

覆盖 func viewWillAppear(_ animated: Bool) { super.viewWillAppear(动画)

  Api.Message.observeStaticUserDiscussion(toId: self.user!.id!) { (message, messageId, currentId) in
     if message.notViewed! && currentId != message.fromId {
        Api.Message.updateMessageStatus(withMessage: messageId, value: false)

     }

  }
  // THIS LINE
  self.delegate?.updateMenuMessage()

}

我的代码很简单,我检查消息是否被读取,如果没有看到消息,我会更新每个消息的状态。

然后,我可以更新一个 tableViewController(主页,显示来自所有用户的消息)。

如果我包含这一行

self.delegate?.updateMenuMessage()

紧接着

Api.Message.updateMessageStatus(withMessage: messageId, value: false)

它正在工作,但是 tableView 被重新加载了很多次......

我想要这样的代码:

  1. 观察是否没有看到消息,并在需要时更新值
  2. 观察功能完成,现在可以重新加载tableView

这可能吗?

【问题讨论】:

    标签: ios swift uitableview firebase swift3


    【解决方案1】:

    试试这个方法。

    添加观察者:

    func getNewMessage(completion: @escaping ([String : AnyObject]) -> Void) {
    
        let messagesRef: DatabaseReference = ref.child("chat").child("messages")
    
        messagesRef.observe(.childAdded, with: { (snapshot) in
    
            guard let snapshotValue = snapshot.value as? [String: AnyObject] else {
                return
            }
    
            completion(snapshotValue)
    
        }, withCancel: nil)
    }
    

    用法:

    getNewMessage { (message) in
        addNewMessageToArray(message)
        self.updateMenuMessage()
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 2017-03-03
      • 1970-01-01
      • 2018-09-12
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多