iOS 8 NSInternalInconsistencyException
Asked Answered
R

1

23

I get the following crash reports. They only occur on devices with iOS 8. Notice the message:

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

Crash report:

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

I can't reproduce it, but it seems to happen when starting the app from the background. Where should I start looking?

Robinetta answered 12/9, 2014 at 13:14 Comment(5)
Is -sendResponse: called anywhere in your code?Thermionic
No, it looks like an internal call.Robinetta
Are you able to debug it or is it a crash report that was sent to you?Thermionic
put a breakpoint on all exceptions and trace the stack back to your code. Looks like somewhere in BSMainScreenOrientationBraid
I get these crash reports from HockeyApp, it doesn't happen on my device or the simulator. Thanks for the tip.Robinetta
R
32

The bug was in the following callback:

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

The crash occurs when you call the completionHandler twice. This happens after iOS8.

Robinetta answered 15/9, 2014 at 12:8 Comment(5)
How did you trigger this method? Is it part of the NSNotification protocol?Zlatoust
This should have been the following: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler So it's a UIApplication delegate method triggered by a remote notification.Robinetta
In my app completionHandler() is called twice since its an @escaping function so all contents are fetched so it causes crash.Isochroous
Does anyone have a Swift variant of this function?Guddle
It can also be - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler, this method uses also a UIBackgroundFetchResult completionHandlerRech

© 2022 - 2024 — McMap. All rights reserved.