【问题标题】:weird crash when launching app from Notification Center从通知中心启动应用程序时出现奇怪的崩溃
【发布时间】:2014-10-14 22:27:30
【问题描述】:

我束手无策,我遇到了一个奇怪的崩溃,只有当应用从通知中心启动时才会发生。点击本地通知(在通知端)或调用 extensionContext:openURL:completionHandler(来自我的 Today 小部件)将使用 customURL 方案启动应用程序。

当应用程序运行时(热启动),没有问题,就像宣传的那样工作。当我杀死应用程序(在任务切换器中)然后尝试通过通知中心(冷启动)启动它时,我收到以下崩溃报告。

我已经在低处和高处搜索过任何东西,但找不到。这只发生在 iOS8 设备上,iOS7 设备没有问题(通知启动,显然没有 Today 小部件)

有人看过吗?

谢谢!

Date/Time:           2014-10-14 18:16:39.924 -0400
Launch Time:         2014-10-14 18:16:38.667 -0400
OS Version:          iOS 8.0.2 (12A405)
Report Version:      105

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000016a4cbeb8
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x0000000195ebbbd0 objc_msgSend + 16
1   UIKit                           0x000000018a27d840 -[UIApplication workspaceDidEndTransaction:] + 216
2   FrontBoardServices              0x000000018da7563c __31-[FBSSerialQueue performAsync:]_block_invoke + 24
3   CoreFoundation                  0x000000018582a35c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 16
4   CoreFoundation                  0x0000000185829464 __CFRunLoopDoBlocks + 308
5   CoreFoundation                  0x0000000185827a88 __CFRunLoopRun + 1752
6   CoreFoundation                  0x0000000185755660 CFRunLoopRunSpecific + 392
7   UIKit                           0x000000018a05f4fc -[UIApplication _run] + 548
8   UIKit                           0x000000018a05a4f4 UIApplicationMain + 1484
9   therichest                      0x00000001001caa8c main (main.m:16)
10  libdyld.dylib                   0x0000000196516a04 start + 0

【问题讨论】:

  • 你解决了这个@Mike 吗?我在野外的几个应用程序中看到了同样的事情,但无法通过向应用程序发送推送通知来在本地复制它。
  • 我可以按照上述步骤一致地复制它。另一个有趣的事实是它仅适用于 iOS8。我正在更新到 v8.1,看看它是否得到解决。
  • 我希望是这样。我还没有在我们的 iOS 8.1 应用程序中看到这种情况发生的一个实例(目前),但现在下结论可能还为时过早。希望您的测试可以确认。
  • 尝试推送通知,终止应用。然后点击通知中心的通知。
  • 我一直在这样做,但没有设法复制它。会坚持。我现在在 iOS8.1 中遇到了这个崩溃,所以它没有在那里修复。

标签: ios objective-c ios8-today-widget


【解决方案1】:

您的代码或您正在使用的第三方库正在手动旋转运行循环。这导致 -workspaceDidEndTransaction: 被重新调用并在释放后触发使用。如果你在 -[NSRunLoop runMode:beforeDate:] 和 -[NSRunLoop runUntilDate:] 上设置断点,它应该会在前一个堆栈帧上出现有罪代码。

虽然不建议手动旋转运行循环,但如果您可以延迟执行此操作,直到您的应用程序完成启动(收到所有启动应用程序委托调用),您应该避免发生此崩溃。

【讨论】:

  • @Dex 提到的是正确的。我正在使用手动旋转运行循环的第三方库。禁用该库解决了我的问题。从那时起,我也通知了库开发人员。
  • @Mike 谢谢。我修复了我的代码。我在我的 didLaunch 应用程序方法中旋转运行循环。删除该调用修复了崩溃
  • 嘿@Dex 如何在 -[NSRunLoop runMode:beforeDate:] 上设置断点?我有同样的问题,如何调试?
猜你喜欢
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多