web-dev-qa-db-fra.com

iOS11 WKWebview se bloque en raison de NSInvalidUnarchiveOperationException

Avec ObjectiveC, je développe une application SingleView ciblant iOS 11 avec un contrôleur de vue/vue. Dans Main.storyboard, en haut de la vue, j'ai supprimé une vue WebKit (WKWebView). 

Je vois un crash à la fois dans le simulateur et sur un iPhone 6 sous iOS 11.0.1:

Application terminée en raison d'une exception non interceptée 'NSInvalidUnarchiveOperationException', raison: 'Impossible d'instancier la classe nommée WKWebView'

Ai-je besoin de quelque chose d'autre pour le faire fonctionner? On dirait qu'il est impossible d'instancier WKWebView au réveil du storyboard.

Autres détails:

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

Pile crash:

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!

22
dmind

NSInvalidUnarchiveOperationException lors du chargement du nib/storyboard signifie qu'un objet du nib/storyboard n'est pas compris par le moteur d'exécution. En effet, le cadre qui définit ce type d'objet est manquant. 

Ainsi, dans ce cas, vous devez lier votre cible d'application au cadre WebKit afin que l'application comprenne ce qu'est un WKWebView lorsqu'il est décodé à partir du storyboard.

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

 enter image description here

50
matt

Sélectionnez Cible -> Général -> Infrastructure et bibliothèques liées -> cliquez sur le symbole + ci-dessous -> recherchez WebKit.Framework -> ajoutez.

4
ram880

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

1
abinop

Moi aussi j'ai rencontré le même genre de problème.

Sans déclarer WKWebView en tant que sortie

 Without declaring as Outlet

Vous avez cette erreur lors de l'exécution dans le simulateur

 enter image description here

 enter image description here

 enter image description here

Après avoir ajouté Outlet, cela a bien fonctionné pour moi.


J'espère que cela t'aides :) 

0
Sree Ramana