ios 由于 NSInvalidUnarchiveOperationException,iOS11 WKWebview 崩溃

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/47142434/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 09:37:33  来源:igfitidea点击:

iOS11 WKWebview crash due to NSInvalidUnarchiveOperationException

iosobjective-ciphoneios11wkwebview

提问by dmind

With ObjectiveC I am developing a SingleView app targeting iOS 11 having one view controller/view. In the Main.storyboard on top of the view I've dropped a WebKit View (WKWebView).

使用 ObjectiveC,我正在开发一个针对 iOS 11 的 SingleView 应用程序,该应用程序具有一个视图控制器/视图。在视图顶部的 Main.storyboard 中,我删除了一个 WebKit 视图 (WKWebView)。

I am seeing a crash in both the Simulator and on an iPhone 6 running iOS 11.0.1 :

我在模拟器和运行 iOS 11.0.1 的 iPhone 6 上都看到崩溃:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named WKWebView'

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

Do I need anything else to have it working ? Looks like it's unable to instantiate WKWebView upon waking from storyboard.

我还需要什么才能让它工作吗?从情节提要中唤醒时,它似乎无法实例化 WKWebView。

Other details:

其他详情:

  • Xcode version 9.0 9A235
  • When I remove the WKWebView from the Storyboard the crash goes away
  • App Base SDK - latest iOS (iOS 11); Deployment target 11.0
  • Using the WebView(deprecated) -- UIWebView, it works
  • I did not attempt to instantiate it manually
  • Xcode 版本 9.0 9A235
  • 当我从故事板中删除 WKWebView 时,崩溃消失了
  • App Base SDK - 最新的 iOS (iOS 11);部署目标 11.0
  • 使用 WebView(deprecated) -- UIWebView,它可以工作
  • 我没有尝试手动实例化它

Crash stack:

崩溃堆栈:

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

Thanks!

谢谢!

回答by matt

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.

加载笔尖/故事板时的 NSInvalidUnarchiveOperationException 意味着笔尖/故事板中有一个运行时不理解的对象。这是因为缺少定义这种对象的框架。

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.

因此,在这种情况下,您需要将您的应用程序目标与 WebKit 框架相关联,以便应用程序在从故事板解码时了解 WKWebView 是什么。

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

这是显示正确配置后应用程序目标的构建阶段的屏幕截图:

enter image description here

在此处输入图片说明

回答by ram880

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

选择 Target -> General -> Linked framework and libraries -> 点击下面的 + 符号 -> 搜索 webKit.Framwork -> 添加。

回答by abinop

Check whether on the storyboard you have a WKWebViewinstance while in code you may have a UIWebViewinstance

检查故事板上是否有WKWebView实例,而在代码中可能有 UIWebView实例

回答by M Murteza

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

单击 Project Target,然后添加 webKit.Framwork,如下所示:

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

常规 -> 链接的框架和库 -> 点击下面的 + 符号 -> 搜索 webKit.Framwork -> 添加。

enter image description here

在此处输入图片说明

回答by Sree Ramana

I too faced same kind of issue.

我也面临同样的问题。

Without declaring WKWebView as Outlet

不将 WKWebView 声明为 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.

添加 Outlet 后,它对我来说效果很好。


Hope this helps :)


希望这可以帮助 :)