在使用 iOS 10.1.1 的 iPhone SE 上调用 UNUserNotificationCenter getPendingNotificationRequests 会崩溃。
这似乎是一个边缘案例 - 我已经确认这适用于具有相同 iOS 版本 - 10.1.1 的 iPhone 5s。它也在该 iPhone 5s 上崩溃了 iOS。
“有趣”的事情不仅是应用程序崩溃,跳板似乎也崩溃了——我们没有被发送到主屏幕,而是锁定屏幕(在看到旋转动画几秒钟后)。似乎 iOS 内部的某些东西——在这个 iPhone SE 上——坏了……我们的应用程序可能做错了什么,但它似乎归结为对 UNUserNotificationCenter.current() 的确切调用。 getPendingNotificationRequests
。我想没有人遇到过这个吧?正如我所说,到目前为止,我们只在这一台 iPhone SE 设备上看到过这种情况,并且我们已经使用了大约 10 或 20 台其他设备,没有出现任何问题。
此外,这通常会在跳板崩溃之前打印在调试控制台中:
[Common] Terminating since there is no system app.
我会继续寻找罪魁祸首...最后我可能会尝试将所述设备更新到最新的 iOS (10.3.1 atm) 并查看是否效果更好。
更新 1: 这似乎是 iOS 中的一个错误,介于 10.0 和 10.1 之间,可能会在 iOS 10.2 中修复。我现在还不能更新这款 iPhone SE,我想我可能必须解决这个问题...
更新 2:制作一个新的简单应用程序,基本上只调用 UNUserNotificationCenter.current().getPendingNotificationRequests
并在 iPhone SE 上运行它不会导致崩溃...情节变浓了……可能在某些情况下我在我的真实应用程序中使用 UNUserNotificationCenter 导致它崩溃。
更新3:不知为何,似乎与当前的app bundle identifier有关。如果我为我们当前的应用程序更改它,问题似乎就消失了。这很奇怪。我尚未确认这是否真的适用于完整状态下的当前应用程序 - 我目前已删除几乎所有其他代码,只是测试此通知行。即使那样,它也会崩溃,使用我们的默认包标识符。 更新中更新:确认如果我只更改 bundle 标识符,完整的应用程序就可以运行。奇怪的。但即使它现在可以工作,也没有任何迹象表明它稍后会开始崩溃。我们的第一个包标识符应该没有问题。毕竟,它只是一个字符串。这很可能是 iOS 中的一个错误(我之前就知道,但只是说说而已)。我还没有找到解决方法。目前的政策是支持 iOS 9...因此,对于 iOS 10.0~10.1 用户来说,该应用程序很可能会出现百分之几的崩溃。
更新 4: 经过更多测试后发现,运行 iOS 10.1.1 的 iPhone 5s 也会以完全相同的方式导致应用程序和跳板崩溃。不确定之前发生了什么,其他人正在此设备上进行测试...
更新 5: UNUserNotificationCenter.current().add()
也会崩溃。我尝试在查看是否存在通知之前添加通知,但添加功能也会使 iOS 崩溃。这是个好主意。
最佳答案
经过大量测试后,我发现一段代码似乎可以神奇地修复所有问题。事不宜迟
UNUserNotificationCenter.current.removeAllPendingNotificationRequests()
在第一次启动应用程序时调用它。就是这样。然而,它需要更多的测试,但目前看来是可行的。
关于ios - 在 iPhone SE iOS 10.1.1 上调用 UNUserNotificationCenter.current().getPendingNotificationRequests 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43840090/