[iOS 13]: Fatal Exception: NSInvalidArgumentException Nie można dodać siebie jako subview ([init NSCache])

9

Widziałem podobne problemy / pytania dotyczące przepełnienia stosu, ale nie pomogły.

Zbudowałem aplikację z Xcode 11 i iOS 13 SDK. Problem polega na tym, że wszystkie te awarie występują tylko w systemie iOS 13+, mimo że moja aplikacja obsługuje system iOS 10+, a wśród nich jest około 50% użytkowników systemu iOS 12. Nie mogę też debugować ani odtwarzać.

Na podstawie tych informacji wywnioskowałem, że problem musi dotyczyć iOS 13. Czy ktoś ostatnio spotkał się z tym samym problemem? Możliwe przyczyny, rozwiązania?

Oto ślad stosu z Crashlytics:

Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x1c25e1c30 __exceptionPreprocess
1  libobjc.A.dylib                0x1c22fc0c8 objc_exception_throw
2  CoreFoundation                 0x1c24d13ac -[NSCache init]
3  UIKitCore                      0x1c6b189a8 -[UIView(Internal) _addSubview:positioned:relativeTo:]
4  UIKitCore                      0x1c6078bb4 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke_2
5  UIKitCore                      0x1c6b11f60 +[UIView(Animation) performWithoutAnimation:]
6  UIKitCore                      0x1c6078630 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke
7  UIKitCore                      0x1c6b1784c +[UIView(Internal) _performBlockDelayingTriggeringResponderEvents:forScene:]
8  UIKitCore                      0x1c6078088 -[_UINavigationParallaxTransition animateTransition:]
9  UIKitCore                      0x1c606e2b0 ___UIViewControllerTransitioningRunCustomTransition_block_invoke_2
10 UIKitCore                      0x1c61822f8 +[UIInputResponderController _pinInputViewsForInputResponderController:onBehalfOfResponder:duringBlock:]
11 UIKitCore                      0x1c606e238 ___UIViewControllerTransitioningRunCustomTransition_block_invoke.648
12 UIKitCore                      0x1c6b11c0c +[UIView(Animation) _setAlongsideAnimations:toRunByEndOfBlock:]
13 UIKitCore                      0x1c606e088 _UIViewControllerTransitioningRunCustomTransition
14 UIKitCore                      0x1c5f9d77c -[UINavigationController _startCustomTransition:]
15 UIKitCore                      0x1c5fb0c18 -[UINavigationController _startDeferredTransitionIfNeeded:]
16 UIKitCore                      0x1c5fb20f8 -[UINavigationController __viewWillLayoutSubviews]
17 UIKitCore                      0x1c5f954e0 -[UILayoutContainerView layoutSubviews]
18 UIKitCore                      0x1c6b1fabc -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
19 libobjc.A.dylib                0x1c22f7af0 -[NSObject performSelector:withObject:]
20 QuartzCore                     0x1c90be0f4 -[CALayer layoutSublayers]
21 QuartzCore                     0x1c90be3fc CA::Layer::layout_if_needed(CA::Transaction*)
22 QuartzCore                     0x1c90d1964 CA::Layer::layout_and_display_if_needed(CA::Transaction*)
23 QuartzCore                     0x1c9016c1c CA::Context::commit_transaction(CA::Transaction*, double)
24 QuartzCore                     0x1c9041bd8 CA::Transaction::commit()
25 QuartzCore                     0x1c90427ac CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*)
26 CoreFoundation                 0x1c255c67c __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
27 CoreFoundation                 0x1c255731c __CFRunLoopDoObservers
28 CoreFoundation                 0x1c25578cc __CFRunLoopRun
29 CoreFoundation                 0x1c2557098 CFRunLoopRunSpecific
30 GraphicsServices               0x1cc6c1534 GSEventRunModal
31 UIKitCore                      0x1c66777ac UIApplicationMain

Aktualizacja 1 : Problem dotyczy wszystkich iPhone'ów z systemem iOS 13, nie tylko linii iPhone X (S, R).

Aktualizacja 2 : Problem dotyczy również systemu iOS 12, ale awarie zdarzają się rzadko w porównaniu z systemem iOS 13. Domyślam się, że problem dotyczy budowy projektu za pomocą zestawu SDK systemu iOS 13, ponieważ ten sam kod zbudowany za pomocą zestawu SDK systemu iOS 12 nie nie powodują takich awarii, a logika nawigacji nie została zaktualizowana.

Aleksandr Honcharov
źródło
Musielibyśmy zobaczyć kod. Domyślam się, że widok próbuje się dodać jako widok podrzędny.
Samuel Noyes,
Oto coś do obejrzenia: stackoverflow.com/a/21226801/2142112
Samuel Noyes,
2
Występuje ten sam błąd, ale w naszym przypadku nie jest on ograniczony do iOS 13. Wygląda na to, że prawdopodobnie chodzi o prezentację / wypychanie / odrzucanie / wyświetlanie kontrolerów widoku z animacją, ale widzę tylko test regresji (próba wypchnięcia / pojawiają się jednocześnie) jako realna metoda debugowania.
EDUsta
1
@EDUsta Cześć. W naszym przypadku mieliśmy także kilka awarii na iOS 12 (90% + nadal iOS 13). Jest to z pewnością specyficzne dla zestawu SDK dla iOS 13. W iOS 12 SDK ten sam kod nie emitował żadnych błędów tego rodzaju i nie zmieniliśmy logiki nawigacji w aplikacji.
Aleksandr Honcharov
1
@chroman Wygląda na to, że aplikacja zbudowana z Xcode 11.3 i iOS SDK 13.3 nie ma już tej awarii. Myślę, że został rozwiązany po stronie Apple SDK.
Aleksandr Honcharov

Odpowiedzi:

2

Aplikacja zbudowana z Xcode 11.3 i iOS SDK 13.3 nie ma już tej awarii. Myślę, że został rozwiązany po stronie iOS SDK.

Aleksandr Honcharov
źródło
Nasza aplikacja nadal wyświetla raporty o tej awarii po zbudowaniu z Xcode 11.3.1
esilver
@esilver Może w niektórych przypadkach tak się dzieje. Może twój scenariusz był nieco inny. Ale w naszym przypadku wypadki całkowicie zniknęły.
Aleksandr Honcharov