77 votes

Crash de WKWebview sous iOS11 dû à NSInvalidUnarchiveOperationException

Je développe avec ObjectiveC une application SingleView pour iOS 11 avec un contrôleur de vue et une vue. Dans le storyboard Main.storyboard, par-dessus la vue, j'ai déposé une vue WebKit (WKWebView).

Je constate une panne à la fois dans le simulateur et sur un iPhone 6 fonctionnant sous iOS 11.0.1 :

Fermeture de l'application en raison d'une exception non attrapée 'NSInvalidUnarchiveOperationException', raison : 'Could not instantiate class named WKWebView'.

Ai-je besoin d'autre chose pour que cela fonctionne ? Il semble qu'il soit impossible d'instancier le WKWebView au réveil du storyboard.

Autres détails :

  • Xcode version 9.0 9A235
  • Lorsque je retire le WKWebView du Storyboard, le crash disparaît.
  • App Base SDK - dernier iOS (iOS 11) ; cible de déploiement 11.0
  • Utiliser le WebView(deprecated) -- UIWebView, ça marche
  • Je n'ai pas essayé de l'instancier manuellement.

Pile de chocs :

2017-11-06 18:38:27.765519+0200 XYZZMap[15689:1093338] *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named WKWebView'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001056d01cb __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x0000000105032f41 objc_exception_throw + 48
    2   CoreFoundation                      0x0000000105744b95 +[NSException raise:format:] + 197
    3   UIKit                               0x000000010692d2c0 UINibDecoderDecodeObjectForValue + 323
    4   UIKit                               0x000000010692d5db UINibDecoderDecodeObjectForValue + 1118
    5   UIKit                               0x000000010692d172 -[UINibDecoder decodeObjectForKey:] + 89
    6   UIKit                               0x00000001062f866b -[UIView initWithCoder:] + 969
    7   UIKit                               0x000000010692d43d UINibDecoderDecodeObjectForValue + 704
    8   UIKit                               0x000000010692d172 -[UINibDecoder decodeObjectForKey:] + 89
    9   UIKit                               0x00000001066dd1a7 -[UIRuntimeConnection initWithCoder:] + 178
    10  UIKit                               0x000000010692d43d UINibDecoderDecodeObjectForValue + 704
    11  UIKit                               0x000000010692d5db UINibDecoderDecodeObjectForValue + 1118
    12  UIKit                               0x000000010692d172 -[UINibDecoder decodeObjectForKey:] + 89
    13  UIKit                               0x00000001066dc3a4 -[UINib instantiateWithOwner:options:] + 1262
    14  UIKit                               0x00000001063f8d07 -[UIViewController _loadViewFromNibNamed:bundle:] + 383
    15  UIKit                               0x00000001063f9610 -[UIViewController loadView] + 177
    16  UIKit                               0x00000001063f9941 -[UIViewController loadViewIfRequired] + 195
    17  UIKit                               0x00000001063fa19e -[UIViewController view] + 27
    18  UIKit                               0x00000001062cdd17 -[UIWindow addRootViewControllerViewIfPossible] + 122
    19  UIKit                               0x00000001062ce41f -[UIWindow _setHidden:forced:] + 294
    20  UIKit                               0x00000001062e12bf -[UIWindow makeKeyAndVisible] + 42
    21  UIKit                               0x0000000106255015 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4711
    22  UIKit                               0x000000010625a245 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1720
    23  UIKit                               0x0000000106615c6c __111-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:]_block_invoke + 924
    24  UIKit                               0x00000001069e33ef +[_UICanvas _enqueuePostSettingUpdateTransactionBlock:] + 153
    25  UIKit                               0x0000000106615865 -[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 249
    26  UIKit                               0x00000001066160c3 -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 668
    27  UIKit                               0x0000000106f73c11 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 262
    28  UIKit                               0x0000000106f73aca -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 444
    29  UIKit                               0x0000000106c61b9c __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 420
    30  UIKit                               0x0000000106e5cc3e _performActionsWithDelayForTransitionContext + 100
    31  UIKit                               0x0000000106c61998 -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 231
    32  UIKit                               0x00000001069e2a4c -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 392
    33  UIKit                               0x0000000106258ac6 -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 523
    34  UIKit                               0x0000000106821523 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 369
    35  FrontBoardServices                  0x000000010b539158 -[FBSSceneImpl _didCreateWithTransitionContext:completion:] + 338
    36  FrontBoardServices                  0x000000010b541c4d __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 235
    37  libdispatch.dylib                   0x00000001096b643c _dispatch_client_callout + 8
    38  libdispatch.dylib                   0x00000001096bbaf4 _dispatch_block_invoke_direct + 592
    39  FrontBoardServices                  0x000000010b56d672 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
    40  FrontBoardServices                  0x000000010b56d328 -[FBSSerialQueue _performNext] + 464
    41  FrontBoardServices                  0x000000010b56d897 -[FBSSerialQueue _performNextFromRunLoopSource] + 45
    42  CoreFoundation                      0x00000001056732b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    43  CoreFoundation                      0x0000000105712d31 __CFRunLoopDoSource0 + 81
    44  CoreFoundation                      0x0000000105657c19 __CFRunLoopDoSources0 + 185
    45  CoreFoundation                      0x00000001056571ff __CFRunLoopRun + 1279
    46  CoreFoundation                      0x0000000105656a89 CFRunLoopRunSpecific + 409
    47  GraphicsServices                    0x000000010be609c6 GSEventRunModal + 62
    48  UIKit                               0x000000010625bd30 UIApplicationMain + 159
    49  XYZZMap                             0x00000001047274bf main + 111
    50  libdyld.dylib                       0x0000000109732d81 start + 1
    51  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Merci !

178voto

matt Points 60113

NSInvalidUnarchiveOperationException lors du chargement de la nib / storyboard signifie qu'il y a un objet dans la nib / storyboard que le runtime ne comprend pas. Cela est dû au fait que le cadre qui définit ce type d'objet est absent.

Dans ce cas, vous devez donc lier la cible de votre application au framework WebKit afin que l'application comprenne ce qu'est un WKWebView lorsqu'il est décodé du storyboard.

Voici une capture d'écran montrant les phases de construction de l'application cible lorsque celle-ci est correctement configurée :

enter image description here

2 votes

Bonjour, je suis également confronté au même type d'erreur, j'ai déjà ajouté le framework webkit. avez-vous une idée de ce qui se passe ?

1 votes

C'est simple, quand on y pense. @Matrix si vous avez des problèmes, assurez-vous de nettoyer et de reconstruire le système, et vérifiez que vous avez ajouté le Framework à la bonne cible.

2 votes

Tu es génial, c'était mon problème.

52voto

ram880 Points 116

Sélectionnez Target -> General -> Linked framework and libraries -> cliquez sur le symbole + ci-dessous -> recherchez webKit.Framwork -> ajoutez.

2 votes

Xcode -> TARGETS -> YourTarget -> Link Binary With Libraries - > + -> Choisissez les frameworks et les librairies à ajouter : -> tapez webKit -> WebKit.framework -> Ajouter ! [entrer la description de l'image ici](https://i.stack.imgur.com/vkvTc.png) \

5voto

Mise à jour pour swift 5.0 ++ Et Xcode- 11.5 +

Si vous avez rencontré ce problème que j'ai mentionné ci-dessous après avoir lié WKWebView sur storyboard .

NSInvalidUnarchiveOperationException', reason : 'Could not instantiate classe nommée WKWebView parce qu'aucune classe nommée WKWebView n'a été trouvée. classe doit être définie dans le code source ou liée à partir d'une bibliothèque (assurez-vous que la classe fait partie de la bonne bibliothèque). (assurez-vous que la classe fait partie de la bonne cible)

Il suffit de suivre cette instruction pour résoudre ce problème dans le nouveau Xcode .

Voici une capture d'écran montrant les phases de construction de la cible du projet lorsque cela est correctement configuré :

enter image description here

3voto

abinop Points 386

Vérifiez si sur le storyboard vous avez un WKWebView alors que dans le code, vous pouvez avoir une UIWebView instance

2voto

M Murteza Points 9

Cliquez sur Project Target et ajoutez webKit.Framwork comme indiqué ci-dessous :

Général -> Cadre et bibliothèques liés -> cliquer sur le symbole + ci-dessous -> rechercher webKit.Framwork -> ajouter.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X