Swift 当我重新启动我的应用程序时,调用Viewwill将消失

Swift 当我重新启动我的应用程序时,调用Viewwill将消失,swift,firebase,uiviewcontroller,lifecycle,Swift,Firebase,Uiviewcontroller,Lifecycle,我已经对这个bug进行了广泛的测试,并将其缩小到只有几行代码。无法理解以下情况如何发生以及如何避免,因此非常感谢您的任何意见。如果需要诊断,请告诉我更多信息 我的应用程序中有消息,为了确定用户是否有未读消息,发送的所有消息都包含一个标志,指示接收用户尚未看到这些消息。用户将对话标记为“已读”的方式有两种: 点击对话 参与对话,然后退出对话(ViewWillEnglish) ---我已经验证了在我重新打开应用程序时正在调用ViewWidellEnglishe(下面)中的代码 override fu

我已经对这个bug进行了广泛的测试,并将其缩小到只有几行代码。无法理解以下情况如何发生以及如何避免,因此非常感谢您的任何意见。如果需要诊断,请告诉我更多信息

我的应用程序中有消息,为了确定用户是否有未读消息,发送的所有消息都包含一个标志,指示接收用户尚未看到这些消息。用户将对话标记为“已读”的方式有两种:

  • 点击对话
  • 参与对话,然后退出对话(ViewWillEnglish)
  • ---我已经验证了在我重新打开应用程序时正在调用ViewWidellEnglishe(下面)中的代码

    override func viewWillDisappear(_ animated: Bool) {
           if conversation?.lastMessageSender != currUserName && conversation?.receiverViewed == false {
            
               let db = Firestore.firestore()
            
               db.collection("conversations").document(conversationID).updateData(["receiverViewed":true])
           }
       }
    
    作为参考,我的数据库是Firebase

    复制步骤:

    • 收到消息
    • 转到对话并查看信息
    • 在messageDetail view controller上关闭应用程序
    • 收到另一条消息
    • 打开应用程序
    预期的: 应用程序打开到主屏幕,显示有未读消息。导航到messagesViewController会显示未读的对话

    实际值
    应用程序打开到主屏幕,不显示未读消息。导航到messagesViewController显示对话已被读取

    db.collection
    call asynchronous吗?它是异步的。顺便说一句,我想出了一个变通办法,当应用程序移到后台时,可以关闭messageDetail视图控制器。我感兴趣的是了解为什么会发生这种情况,避免使用一个创可贴解决方案。不要不挑剔,但是如果你关闭这个应用程序,它就不会收到另一个信息,对吧?它已关闭,没有代码正在运行。那么,您是否正在对通知进行处理?另外,如果应用程序正在打开,为什么会调用
    视图将消失
    ?如果查看该视图,则该视图只有在它出现后才会消失。当应用程序启动时,是否向Firebase添加未读消息的侦听器?如果你能澄清这个问题,我们来看看!嗨@Jay,你问的问题都是我自己的问题,这就是为什么我在再次启动应用程序时确定ViewWillEnglish是否实际运行之前做了这么多测试。到目前为止,我的推送通知是哑的,只是从firebase发送,没有可操作的代码。当我点击应用程序图标(而不是通知)打开应用程序时,甚至会发生此错误。是的,我有一个侦听器从服务器上向下拉消息。我会尽我所能提供任何细节,谢谢你的关注!这个问题确实需要更新;添加一个断点并单步执行代码,直到看到调用ViewWillEnglishe的位置并从那里回溯。