【问题标题】:iOS 8 NSInternalInconsistencyExceptioniOS 8 NSInternalInconsistencyException
【发布时间】:2014-11-06 16:28:02
【问题描述】:

我收到以下崩溃报告。它们只发生在装有 iOS 8 的设备上。注意消息:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'this request has been neutered - you can't call -sendResponse: twice nor after encoding it'

崩溃报告:

Date/Time:       2014-08-31T01:39:15Z
OS Version:      iPhone OS 8.0 (12A4345d)
Report Version:  104

Exception Type:  SIGABRT
Exception Codes: #0 at 0x1964cb270
Crashed Thread:  0

Application Specific Information:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'this request has been neutered - you can't call -sendResponse: twice nor after encoding it'

Last Exception Backtrace:
0   CoreFoundation                       0x0000000186192084 CFDateGetTimeIntervalSinceDate + 19604
1   libobjc.A.dylib                      0x0000000195d3c0e4 objc_exception_throw + 56
2   CoreFoundation                       0x0000000186191f44 CFDateGetTimeIntervalSinceDate + 19280
3   Foundation                           0x0000000187075e20 _NSSetExceptionRaiser + 340
4   BaseBoard                            0x000000018c1deb90 BSMainScreenOrientation + 4856
5   libdispatch.dylib                    0x000000019638d254 0x19638c000 + 4692
6   libdispatch.dylib                    0x0000000196395d50 dispatch_barrier_sync_f + 1176
7   BaseBoard                            0x000000018c1deae4 BSMainScreenOrientation + 4684
8   UIKit                                0x000000018ac9df88 _UIBackdropViewSettingsColorCancelRed + 28984
9   libdispatch.dylib                    0x000000019638d294 0x19638c000 + 4756
10  libdispatch.dylib                    0x000000019638d254 0x19638c000 + 4692
11  libdispatch.dylib                    0x000000019639103c _dispatch_main_queue_callback_4CF + 952
12  CoreFoundation                       0x00000001861498dc CFRunLoopTimerSetTolerance + 4196
13  CoreFoundation                       0x0000000186147984 _CFRunLoopGet2b + 3316
14  CoreFoundation                       0x0000000186075664 CFRunLoopRunSpecific + 392
15  GraphicsServices                     0x000000018f0a75a4 GSEventRunModal + 164
16  UIKit                                0x000000018a82e164 UIApplicationMain + 1484
17  Taptalk                              0x00000001000bfccc main (main.m:21)
18  libdyld.dylib                        0x00000001963b2a08 _tlv_bootstrap + 232

我无法重现它,但它似乎在从后台启动应用程序时发生。 我应该从哪里开始寻找?

【问题讨论】:

  • -sendResponse: 是否在您的代码中的任何位置调用?
  • 不,它看起来像一个内部调用。
  • 你能调试它还是给你发送的崩溃报告?
  • 在所有异常上放置一个断点,并将堆栈追溯到您的代码。看起来像是在BSMainScreenOrientation 的某个地方
  • 我从 HockeyApp 获得了这些崩溃报告,它不会发生在我的设备或模拟器上。感谢您的提示。

标签: ios objective-c ios8 crash-reports


【解决方案1】:

错误出现在以下回调中:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

当您调用completionHandler 两次时会发生崩溃。这发生在 iOS8 之后。

【讨论】:

  • 你是怎么触发这个方法的?它是 NSNotification 协议的一部分吗?
  • 这应该是这样的:- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler 所以它是一个由远程通知触发的 UIApplication 委托方法。
  • 在我的应用程序中,completionHandler() 被调用了两次,因为它是一个 @escaping 函数,所以所有内容都被获取,所以它会导致崩溃。
  • 有人有这个函数的 Swift 变体吗?
  • 也可以是- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler,这个方法也使用了UIBackgroundFetchResultcompletionHandler
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多