ios - 在 iPhone SE iOS 10.1.1 上调用 UNUserNotificationCenter.current().getPendingNotificationRequests 崩溃

标签 ios iphone ios10

在使用 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/

相关文章:

ios - QuickBlox 自定义表 -- 在 iOS 上创建关系并获取相关记录

ios - 如何使用 iOS GoogleDrive SDK 播放流媒体视频?

delegates - SFSpeechRecognitionTaskDelegate 委托(delegate)方法没有被调用

iphone - 使用 viewDidUnload 在 iPhone 上进行内存管理

ios - 如何在 Swift 中禁用/启用 AVPlayer 的快进功能

Objective-C 中的 iOS 10 富媒体推送通知(媒体附件)

ios - 将 iOS 应用程序移植到 Mac OS-X(音频捕获和播放)

ios - 如何快速以全屏模式打开 VLC

iphone - 为什么 MFMailComposeViewController 不发送消息?

objective-c - 在 UIViewController 的 viewDidUnload 中释放 IBOutlets?