[iOS 13]:致命异常:NSInvalidArgumentException无法将自身添加为子视图([NSCache init])


9

我在Stack Overflow上看到过类似的问题,但它们并没有帮助。

我使用Xcode 11和iOS 13 SDK构建了该应用程序。问题是,即使我的应用程序支持iOS 10+,并且只有约50%的iOS 12用户,我都只能在iOS 13+上获得所有这些崩溃。另外,我无法调试或复制它。

从此信息中我推断出该问题必须特定于iOS13。最近有人遇到过同一问题吗?可能的原因,解决方法?

这是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

更新1:此问题与所有运行iOS 13的iPhone有关,而不仅仅是iPhone X(S,R)系列。

更新2:该问题也与iOS 12有关,但是与iOS 13相比,崩溃很少发生。我的猜测是,该问题与使用iOS 13 SDK构建项目有关,因为使用iOS 12 SDK构建的相同代码没有不会发出此类崩溃信息,并且导航逻辑没有更新。


我们将不得不看一些代码。我想一个视图正在尝试将其自身添加为子视图。
塞缪尔·诺伊斯,

以下是值得研究的内容:stackoverflow.com/a/21226801/2142112
Samuel Noyes

2
我们发生了同样的错误,但在我们的案例中,它不仅限于iOS13。似乎这可能与用动画呈现/推动/关闭/弹出视图控制器有关,但我只能看到回归测试(试图推动/同时弹出)作为可行的调试方法。
EDUsta

1
@EDUsta嗨。在我们的案例中,我们在iOS 12上也发生了几次崩溃(90%以上仍是iOS 13)。它肯定是特定于iOS 13 SDK的。使用iOS 12 SDK,相同的代码不会发出任何此类错误,并且我们没有更改应用程序中的导航逻辑。
亚历山大·洪卡洛夫

1
@chroman似乎使用Xcode 11.3和iOS SDK 13.3构建的应用程序不再崩溃。我想这是在Apple SDK方面解决的。
亚历山大·洪卡洛夫

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.