web-dev-qa-db-ja.com

iOS 10以前で「_UIScrollViewLayoutGuideという名前のクラスをインスタンス化できませんでした」でアプリがクラッシュする

私は何ヶ月もの間、以下のエラーに苦労しており、既存のスタックの回答はどれも役に立ちませんでした。コンソールの結果を見てエラーが発生する正確な場所を見つけるのは苦手です。

エラーログを確認して問題の特定やヒントを得るのが得意な人がいる場合は、締め切りにいるので、助けてください

これは、古いデバイスで実行すると発生するエラーです(新しいデバイスで正常に機能します)。

2019-12-30 16:52:04.784 Hospital[7075:164758] *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named _UIScrollViewLayoutGuide'

***最初のスローコールスタック:(0 CoreFoundation 0x000000010ad9fb0b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010a804141 objc_exception_throw + 48 2 CoreFoundation 0x000000010ae08625 + [NSException raise:format:] + 197

3   UIKit                               0x000000010c15368d UINibDecoderDecodeObjectForValue + 323

4   UIKit                               0x000000010c15353f -[UINibDecoder decodeObjectForKey:] + 89
5   Foundation                          0x0000000109b0e417 -[NSLayoutConstraint initWithCoder:] + 757
6   UIKit                               0x000000010c1537ff UINibDecoderDecodeObjectForValue + 693

7   UIKit                               0x000000010c15399d UINibDecoderDecodeObjectForValue + 1107

8   UIKit                               0x000000010c15353f -[UINibDecoder decodeObjectForKey:] + 89
9   UIKit                               0x000000010bbee9de -[UIView initWithCoder:] + 2209
10  UIKit                               0x000000010bc29687 -[UIScrollView initWithCoder:] + 71
11  UIKit                               0x000000010c1537ff UINibDecoderDecodeObjectForValue + 693
12  UIKit                               0x000000010c15399d UINibDecoderDecodeObjectForValue + 1107
13  UIKit                               0x000000010c15353f -[UINibDecoder decodeObjectForKey:] + 89
14  UIKit                               0x000000010bbee4ed -[UIView initWithCoder:] + 944
15  UIKit                               0x000000010c1537ff UINibDecoderDecodeObjectForValue + 693

16  UIKit                               0x000000010c15353f -[UINibDecoder decodeObjectForKey:] + 89
17  UIKit                               0x000000010bf62f70 -[UIRuntimeConnection initWithCoder:] + 178
18  UIKit                               0x000000010c1537ff UINibDecoderDecodeObjectForValue + 693
19  UIKit                               0x000000010c15399d UINibDecoderDecodeObjectForValue + 1107
20  UIKit                               0x000000010c15353f -[UINibDecoder a:] + 89
21  UIKit                               0x000000010bf6216d -[UINib instantiateWithOwner:options:] + 1262
22  UIKit                               0x000000010bcfcfc3 -[UIViewController _loadViewFromNibNamed:bundle:] + 381
23  UIKit                               0x000000010bcfd8d9 -[UIViewController loadView] + 177
24  UIKit                               0x000000010bcfdc0a -[UIViewController loadViewIfRequired] + 195
25  UIKit                               0x000000010bcfe45a -[UIViewController view] + 27
26  Hospital                     0x00000001086ecb00 $s15_Hospital15PagerScrollViewC03setcdE010toParentVC05pagesI0ySo16UIViewControllerC_SayAHGSgtF + 1152
27  Hospital                     0x00000001086f6b85 $s15_Hospital22HomeMainViewControllerC11viewDidLoadyyF + 3861
28   Hospital                     0x00000001086f6e9b $s15_Hospital22HomeMainViewControllerC11viewDidLoadyyFTo + 43
29  UIKit                               0x000000010bcfe01a -[UIViewController loadViewIfRequired] + 1235
30  UIKit                               0x000000010bd3ce6c -[UINavigationController _layoutViewController:] + 56
31  UIKit                               0x000000010bd3d74a -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 466
32  UIKit                               0x000000010bd3d8bb -[UINavigationController _startTransition:fromViewController:toViewController:] + 127
33  UIKit                               0x000000010bd3ea03 -[UINavigationController _startDeferredTransitionIfNeeded:] + 843
34  UIKit                               0x000000010bd3fb41 -[UINavigationController __viewWillLayoutSubviews] + 58
35  UIKit                               0x000000010bf3160c -[UILayoutContainerView layoutSubviews] + 231
36  UIKit                               0x000000010bc1e55b -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1268
37  QuartzCore                          0x000000010a572904 -[CALayer layoutSublayers] + 146
38  QuartzCore                          0x000000010a566526 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 370
39  QuartzCore                          0x000000010a5663a0 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
40  QuartzCore                          0x000000010a4f5e92 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294
41  QuartzCore                          0x000000010a522130 _ZN2CA11Transaction6commitEv + 468
42  QuartzCore                          0x000000010a522b37 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 115
43  CoreFoundation                      0x000000010ad45717 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23

44  CoreFoundation                      0x000000010ad45687 __CFRunLoopDoObservers + 391
45  CoreFoundation                      0x000000010ad2a038 CFRunLoopRunSpecific + 440
46  UIKit                               0x000000010bb5508f -[UIApplication _run] + 468
47  UIKit                               0x000000010bb5b134 UIApplicationMain + 159
48   Hospital                     0x000000010872773b main + 75
49  libdyld.dylib                       0x000000010e5d965d start + 1

)libc ++ abi.dylib:NSExceptionタイプのキャッチされない例外で終了します

4
Jaseel.Dev

@Lukeの回答のおかげで、問題の正確な理由がわかりました。それは、アイテムとスクロールビューのコンテンツレイアウトガイドの間の制約が原因です。

したがって、問題のある場所を見つけるには:

  1. ログを確認して、どのView Controllerが問題に関与しているかを確認してください。 @ Jaseel.Devが示すログによると、「Alexis_Hospital」です。
  2. Interface Builderのそのビューコントローラで、すべてのスクロールビューとそれらのコンテンツレイアウトガイドまたはフレームレイアウトガイドを確認してください
  3. 修正する方法は2つあります。

a)スクロールビューをクリックして、チェックを外します[ ] Content Layout Guidesおよびそれらを再度確認します(Interface Builderは「レイアウトガイド」のエッジを「superview」に再割り当てします)

enter image description here

b)コンテンツ自動レイアウトガイドをクリックして、それらを指している制約があるかどうかを確認します。それらの制約を取り除く。

enter image description here

主なアイデアは、iOS 10以前ではクラッシュするこれらの制約を取り除くことです。

0
Vitalii

ソースコードで次のことを確認してください:

  1. XibまたはStoryboardファイルにIBOutletまたはIBAction接続に関する警告があるかどうかを確認します。
  2. エラーログバックトレースはUINibDecoderでエラーを表示するため、エラーはXibまたはStoryboardにあるはずです。
  3. UILayoutGuideはiOS 9.0以降で利用できるため、アプリの展開ターゲットを確認してください。これはiOS 9以上である必要があります。
  4. また、この問題はiOS 9未満で実行される可能性のある古いデバイスでのみ発生することにも言及しました。
  5. Xcodeのファイルインスペクタで[セーフエリアレイアウトガイドを使用]オプションをオフにします。
  6. 最後に、以前の作業バージョンのソースコードを確認し、最近の変更をエラーコードベースと比較して、クラッシュの原因を特定します。
0
Natarajan