Как отследить утверждения автоматического макета из фонового потока - PullRequest
0 голосов
/ 27 июня 2019

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

-[NSISEngine _optimizeWithoutRebuilding] 

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

 This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
 Stack:(
0   Foundation                          0x000000010cd1752a _AssertAutolayoutOnAllowedThreadsOnly + 77
1   Foundation                          0x000000010cd17251 -[NSISEngine _optimizeWithoutRebuilding] + 61
2   Foundation                          0x000000010cd1717f -[NSISEngine optimize] + 108
3   Foundation                          0x000000010cd123a5 -[NSISEngine performPendingChangeNotifications] + 84
4   UIKitCore                           0x00000001187e7cc8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2192
5   QuartzCore                          0x000000010da41eae -[CALayer layoutSublayers] + 173
6   QuartzCore                          0x000000010da46b88 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 396
7   QuartzCore                          0x000000010da52ee4 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 72
8   QuartzCore                          0x000000010d9c23aa _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 328
9   QuartzCore                          0x000000010d9f9584 _ZN2CA11Transaction6commitEv + 608
10  QuartzCore                          0x000000010d9fa435 _ZN2CA11Transaction14release_threadEPv + 201
11  libsystem_pthread.dylib             0x0000000115cd66ab _pthread_tsd_cleanup + 551
12  libsystem_pthread.dylib             0x0000000115cd9655 _pthread_exit + 70
13  libsystem_pthread.dylib             0x0000000115cd643a _pthread_wqthread_exit + 74
14  libsystem_pthread.dylib             0x0000000115cd5644 _pthread_wqthread + 472
15  libsystem_pthread.dylib             0x0000000115cd53fd start_wqthread + 13

Вопрос: Есть ли какой-то другой способ, которым я должен поставить точку останова, или какой-нибудь лучший способ отследить это?

Обновление: я добавил точки останова, как упомянуто, он достиг точки останова, ностек вызовов не показывает, что вызвало точку останова.Смотрите скриншоты.

Call Stack 1

Call Stack 2

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

...