0

私は、サード パーティの iOS アプリによって使用される iOS SDK プロジェクトを持っています。最近、SDK の 1 つの API に関するクラッシュが報告されており、その原因は次のとおりです。

threading violation: expected the main thread [name NSInternalInconsistencyException, reason threading violation: expected the main thread]

サード パーティのアプリによって呼び出される API は非同期であり、バックグラウンド スレッドで非同期に処理を行い、メイン スレッドで呼び出し元にコールバックを返します。

この例外は、メイン スレッドではなくバックグラウンド スレッドで UI 操作を実行しているときに発生することが多いことを認識しています。

ただし、呼び出し元にコールバックを返す前にその SDK API で次のコードを使用して、呼び出し元がメイン スレッドでコールバックを取得することを確認しているため、これがまだ発生する理由を理解できません。

void runOnMainThread(void (^block)(void)){
if ([NSThread isMainThread]) {
    block();
} else {
    dispatch_async(dispatch_get_main_queue(), block);
}
}

スタックトレース:

Stack Trace : (
0   CoreFoundation                      0x00000001a154b9ec F3021642-E3C0-33F8-9911-DD303A6056D0 + 1157612
1   libobjc.A.dylib                     0x00000001b58ceb54 objc_exception_throw + 56
2   CoreFoundation                      0x00000001a145a50c F3021642-E3C0-33F8-9911-DD303A6056D0 + 169228
3   Foundation                          0x00000001a2754878 712A564E-5058-3EAC-AF3A-43BBD43D0D7E + 489592
4   FrontBoardServices                  0x00000001b08be614 E42FBC3B-619C-32AB-A210-4A25F8B5373F + 349716
5   FrontBoardServices                  0x00000001b08710a4 E42FBC3B-619C-32AB-A210-4A25F8B5373F + 32932
6   UIKitCore                           0x00000001a3485fdc CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 2088924
7   UIKitCore                           0x00000001a34847e8 CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 2082792
8   UIKitCore                           0x00000001a348456c CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 2082156
9   UIKitCore                           0x00000001a401824c CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 14221900
10  UIKitCore                           0x00000001a3df3c44 CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 11975748
11  UIKitCore                           0x00000001a3df4af0 CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 11979504
12  UIKitCore                           0x00000001a32a37a8 CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 112552
13  UIKitCore                           0x00000001a32a2728 CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 108328
14  UIKitCore                           0x00000001a32a5a18 CC6E5AC7-8248-35F6-8B42-2E25C93DCF0A + 121368
15  third party app                     0x0000000106e81cc0 MySignalHandler + 184
16  libsystem_platform.dylib            0x00000001e90a9d90 3A71914A-C2A7-3514-B519-DF319E7A6E02 + 28048

呼び出し元がバックグラウンド スレッドでコールバックを取得する可能性はありますか?

4

0 に答える 0