由于 NSInvalidUnarchive veOperationException 导致 iOS11 WKWebview 崩溃

我正在使用 Objective C 开发一个针对 iOS 11的 SingleView 应用程序,它只有一个视图控制器/视图。在视图顶部的 Main.Storyboard 中,我放置了一个 WebKit 视图(WKWebView)。

我在模拟器和运行 iOS11.0的 iPhone6上都看到了崩溃。1:

终止应用程序由于未捕获异常“ NSInvalidUnarchive veOperationException”,原因: “无法实例化名为 WKWebView 的类”

我还需要别的东西来让它工作吗?看起来它无法在从故事板中唤醒时实例化 WKWebView。

其他详情:

  • Xcode 版本9.09A235
  • 当我从故事板中删除 WKWebView 时,崩溃就消失了
  • App Base SDK-最新的 iOS (iOS 11) ; 部署目标11.0
  • 使用 WebView (不推荐)—— UIWebView,它可以工作
  • 我没有尝试手动实例化它

应急措施:

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

谢谢!

31515 次浏览

NSInvalidUnarchiveOperationException when loading the nib / storyboard means there an object in the nib / storyboard that the runtime doesn't understand. This is because the framework that defines that kind of object is missing.

So, in this case, you need to link your app target against the WebKit framework so that the app understands what a WKWebView is when it is decoded from the storyboard.

Here's a screen shot showing the app target's Build Phases when this is correctly configured:

enter image description here

Select Target -> General -> Linked framework and libraries -> click on + symbol below -> search for webKit.Framwork -> add.

I too faced same kind of issue.

Without declaring WKWebView as Outlet

Without declaring as Outlet

Got this error while running in simulator

enter image description here

enter image description here

enter image description here

After adding Outlet it worked fine for me.


Hope this helps :)

Check whether on the storyboard you have a WKWebView instance while in code you may have a UIWebView instance

Click on Project Target and then add webKit.Framwork as display below :

General -> Linked framework and libraries -> click on + symbol below -> search for webKit.Framwork -> add.

enter image description here

Update for swift 5.0 ++ And Xcode- 11.5 +

If you faced this issue which I mentioned below after linked WKWebView in storyboard.

NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named WKWebView because no class named WKWebView was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)

Just follow this instruction to solve this in new Xcode.

Here's a screen shot showing the project target's Build Phases when this is correctly configured:

enter image description here