ios - 当应用程序在后台时,我可以访问 AppDelegate 内的应用程序变量吗?
问题描述
我正在开发 react-native iOS 中的聊天应用程序。当在后台模式下收到新通知时,我想在主应用程序图标中显示徽章计数。现在我可以在主应用程序图标中显示徽章计数。但它会增加每个通知的计数。我想根据聊天来限制这一点。为此,我需要有新消息的聊天 ID。当应用程序在后台运行时,我可以在 Appdelegate.m 的 didReceiveRemoteNotification 方法中访问应用程序变量吗?
解决方案
只要您的代码正在运行,您就可以访问几乎所有内容,但有一些限制。
这里的问题是您认为什么是“应用程序变量”。这些很可能是已经在您的内存中的对象,可以didReceiveRemoteNotification
毫无问题地使用或任何其他方法访问。
当它们不在您的记忆中时,可能会出现一些限制,但它们不一定是不可访问的。一些可能有问题也可能没有问题的情况:
- 如果文件被您的操作系统加密,则从磁盘读取
- 资源在远程服务器上,您需要通过互联网进行通信
- 您的数据在 GPU 上或需要 GPU 进行处理
如果您didReceiveRemoteNotification
已经被呼叫,那么您应该很少或没有问题。但通知不一定会触发此方法。通知的有效负载应该已经包含徽章计数,并且您的操作系统应该能够正确显示徽章,而不是总是向其添加值。
应用程序可能不只是在后台。它可能会被暂停甚至终止。您的应用程序可能会从通知中唤醒,在这种情况下您不能期望didReceiveRemoteNotification
被调用。即使是你也不能指望你的记忆中还有以前电话的任何信息;由于您的应用程序刚刚重新启动,因此之前运行的内存中没有任何内容。
推荐阅读
- python - 我的 sqlite3 数据库出了什么问题?
- python - 如何从两侧裁剪 Qt 窗口?
- image - 使用 gnuplot 创建出版质量图像
- swift - 返回字符串并在 NSTextField 中显示(SwiftUI / macOS App)
- python - 在 Pydantic 中使用 Pandas 数据框作为类型
- javascript - 纯 CSS 水平滚动
- javascript - 如何在日期行上方的 dhtmlx 甘特图上显示工具提示
- c# - 为什么 Visual Studio 不将 Obsolete("message") 视为警告?
- c++ - c 编译器如何识别系统调用?
- r - 如果与 R 中的条件匹配,则过滤 id 的所有详细信息