завершениеHandler из 2 методов executeFetchWitchCompletionHandler И мешал ли ReceiveRemoteNotification друг другу? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть приложение для iOS (swift), доступное в AppStore с ноября 2017 года. Я добавил Firebase Analytics и Crashlytics, чтобы заранее видеть проблемы, которые не возникали во время разработки и тестирования.

В настоящее время я борюсь сследующий Stacktrace, который я получаю несколько раз на моей панели инструментов Firebase Crashlytics:

Stacktrace от Firebase

Fatal Exception: NSInternalInconsistencyException этот запрос был кастрирован - вы можете'call -sendResponse: дважды, ни после его кодирования

Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x1ac20bef8 __exceptionPreprocess
1  libobjc.A.dylib                0x1ab3d9a40 objc_exception_throw
2  CoreFoundation                 0x1ac12006c +[_CFXNotificationTokenRegistration keyCallbacks]
3  Foundation                     0x1acc0c3e0 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]
4  BaseBoard                      0x1aea6cd68 __40-[BSAction sendResponse:withCompletion:]_block_invoke
5  libdispatch.dylib              0x1abc44484 _dispatch_client_callout
6  libdispatch.dylib              0x1abc24754 _dispatch_lane_barrier_sync_invoke_and_complete
7  BaseBoard                      0x1aea20c60 -[BSAction sendResponse:withCompletion:]
8  UIKitCore                      0x1d8c20698 -[UIHandleRemoteNotificationAction sendResponse:]
9  UIKitCore                      0x1d9054d3c __91-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:]_block_invoke_3.2891
10 libdispatch.dylib              0x1abc436c8 _dispatch_call_block_and_release
11 libdispatch.dylib              0x1abc44484 _dispatch_client_callout
12 libdispatch.dylib              0x1abc23b44 _dispatch_main_queue_callback_4CF$VARIANT$armv81
13 CoreFoundation                 0x1ac19a1bc __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
14 CoreFoundation                 0x1ac195084 __CFRunLoopRun
15 CoreFoundation                 0x1ac1945b8 CFRunLoopRunSpecific
16 GraphicsServices               0x1ae408584 GSEventRunModal
17 UIKitCore                      0x1d903cbc8 UIApplicationMain
18 <APP-NAME>                     0x10251bc84 main (AppDelegate.swift:18)
19 libdyld.dylib                  0x1abc54b94 start

Странно то, что во время разработки и тестирования эта конкретная ошибка вообще не возникает.

Iсделал много исследований в последние дни по этой теме.Я нашел несколько SO сообщений, где эта проблема была решена.

Проблема фонового извлечения iOS8

iOS 8 NSInternalInconsistencyException

Невозможно понять, где происходит сбой MyApp

В основном сбой происходит, когда вы вызываете completionHandler дважды.Но в разных постах они ссылаются на 2 разных метода, но оба имеют одинаковые completionHandler:

executeFetchWitchCompletionHandler

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  // code here
  completionHandler(.newData)
}

didReceiveRemoteNotification

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  // code here
  completionHandler(.newData)
}

Я не могу найти позицию, где я вызываю завершениеHandler обоих методов дважды.Мой вопрос будет, если возможно реализовать оба метода в AppDelegate без получения вышеупомянутой ошибки выше.Или параллельная реализация двух методов performFetchWitchCompletionHandler и didReceiveRemoteNotification мешает друг другу?

...