В чем причина iOS 12 ".cold.1" viewcontroller cra sh, относящегося к CoreData? - PullRequest
0 голосов
/ 11 марта 2020

В моем приложении iOS есть cra sh, который уникален только для iOS 12. Этот cra sh начал происходить, когда был выпущен Xcode 11.3.

Трассировка стека выглядит следующим образом

Crashed: com.apple.main-thread
0  libsystem_kernel.dylib         0x20148b0dc __pthread_kill + 8
1  libsystem_pthread.dylib        0x201504094 pthread_kill$VARIANT$mp + 380
2  libsystem_c.dylib              0x2013e3ea8 abort + 140
3  Field Portal                   0x100d9cc74 -[InventoryViewController initializeData].cold.1 + 4305833076
4  Field Portal                   0x100c1227c -[PSICoreDataController saveViewContext] + 73 (PSICoreDataController.m:73)
5  CoreData                       0x2044832b0 developerSubmittedBlockToNSManagedObjectContextPerform + 156
6  libdispatch.dylib              0x20132d7d4 _dispatch_client_callout + 16
7  libdispatch.dylib              0x2012db008 _dispatch_main_queue_callback_4CF$VARIANT$mp + 1068
8  CoreFoundation                 0x201880b20 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
9  CoreFoundation                 0x20187ba58 __CFRunLoopRun + 1924
10 CoreFoundation                 0x20187afb4 CFRunLoopRunSpecific + 436
11 GraphicsServices               0x203a7c79c GSEventRunModal + 104
12 UIKitCore                      0x22e0dcc38 UIApplicationMain + 212
13 Field Portal                   0x100c1939c main + 14 (main.m:14)
14 libdyld.dylib                  0x20133e8e0 start + 4

InventoryViewController - очень специфичный c контроллер представления, ОЧЕНЬ глубоко вложенный в приложение , и не используется ни одним пользователем моего приложения (да, я знаю это).

Похоже, что происходит, когда я вызываю save для моего основного viewContext, среда выполнения iOS каким-то образом инициализируется InventoryViewController сам по себе вызывает эту функцию, в результате чего cra sh.

InitializeData сам по себе просто выполняет простой NSFetchRequest для основного контекста CoreData, и если я получу доступ к этому представлению обычными средствами, он не будет cra sh на уязвимом оборудовании / ОС.

Что я не понимаю, почему ПОЧЕМУ iOS делает это? Этот контроллер представления никогда не доступен пользователям, и он никогда не вызывается напрямую из моего кода.

Более того, этот код не изменился почти за календарный год и неожиданно начал появляться только в этих новых сборках, и только в iOS 12.

Я обнаружил, что эту проблему невозможно отладить, и приветствовал бы любое понимание методологий для исследования и анализа того, как я могу выяснить, в чем причина этой проблемы.

...