UIWebView 抛出 NSUnknownKeyException iPad

Posted

技术标签:

【中文标题】UIWebView 抛出 NSUnknownKeyException iPad【英文标题】:UIWebView throwing NSUnknownKeyException iPad 【发布时间】:2011-01-31 03:27:34 【问题描述】:

我有一个标签栏应用程序。一切正常,我可以在选项卡之间切换一切正常,除非我切换到我的第二个选项卡ProductViewClass 视图不会更新,它会在下面吐出控制台输出。除了 UIWebView 和 UILabel 之外,我在这个视图中什么都没有。当我删除 UIWebView 它运行成功,当我添加另一个它仍然有效。只有当我将文件所有者的 IBOutlet 连接到 UIWebView 时,它才会停止工作。除了合成和发布productWebView之外,ProductWebView.m中唯一的非模板代码是这样的:

    NSString *urlString = @"http://www.google.com/";
    NSURL *theURL = [NSURL URLWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:theURL];
    [productWebView loadRequest:urlRequest];
    NSLog(@"Google loaded");

ProductWebView.h整体如下:

#import <UIKit/UIKit.h>
@interface ProductViewClass : UIViewController 

    IBOutlet UIWebView *productWebView;


@property(nonatomic, retain) UIWebView *productWebView;
@end

这是控制台输出:

This GDB was configured as "x86_64-apple-darwin".Attaching to process 52523.
2011-01-30 19:18:28.907 FairCom[52523:40b] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x4d06eb0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key productWebView.'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00da8be9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00efd5c2 objc_exception_throw + 47
    2   CoreFoundation                      0x00da8b21 -[NSException raise] + 17
    3   Foundation                          0x000296cf _NSSetUsingKeyValueSetter + 135
    4   Foundation                          0x0002963d -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
    5   UIKit                               0x004a88d6 -[UIRuntimeOutletConnection connect] + 112
    6   CoreFoundation                      0x00d1f2cf -[NSArray makeObjectsPerformSelector:] + 239
    7   UIKit                               0x004a72ed -[UINib instantiateWithOwner:options:] + 1041
    8   UIKit                               0x004a9081 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
    9   UIKit                               0x00361a94 -[UIViewController _loadViewFromNibNamed:bundle:] + 70
    10  UIKit                               0x0035f709 -[UIViewController loadView] + 120
    11  UIKit                               0x0035f5e3 -[UIViewController view] + 56
    12  UIKit                               0x00372230 -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:] + 120
    13  UIKit                               0x00370d86 -[UITabBarController transitionFromViewController:toViewController:] + 64
    14  UIKit                               0x00372b7e -[UITabBarController _setSelectedViewController:] + 263
    15  UIKit                               0x003729ed -[UITabBarController _tabBarItemClicked:] + 352
    16  UIKit                               0x002b1a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    17  UIKit                               0x004af1f2 -[UITabBar _sendAction:withEvent:] + 422
    18  UIKit                               0x002b1a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    19  UIKit                               0x003401b5 -[UIControl sendAction:to:forEvent:] + 67
    20  UIKit                               0x00342647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    21  UIKit                               0x0034016c -[UIControl sendActionsForControlEvents:] + 49
    22  UIKit                               0x002b1a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    23  UIKit                               0x003401b5 -[UIControl sendAction:to:forEvent:] + 67
    24  UIKit                               0x00342647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    25  UIKit                               0x003411f4 -[UIControl touchesEnded:withEvent:] + 458
    26  UIKit                               0x002d60d1 -[UIWindow _sendTouchesForEvent:] + 567
    27  UIKit                               0x002b737a -[UIApplication sendEvent:] + 447
    28  UIKit                               0x002bc732 _UIApplicationHandleEvent + 7576
    29  GraphicsServices                    0x016dea36 PurpleEventCallback + 1550
    30  CoreFoundation                      0x00d8a064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    31  CoreFoundation                      0x00cea6f7 __CFRunLoopDoSource1 + 215
    32  CoreFoundation                      0x00ce7983 __CFRunLoopRun + 979
    33  CoreFoundation                      0x00ce7240 CFRunLoopRunSpecific + 208
    34  CoreFoundation                      0x00ce7161 CFRunLoopRunInMode + 97
    35  GraphicsServices                    0x016dd268 GSEventRunModal + 217
    36  GraphicsServices                    0x016dd32d GSEventRun + 115
    37  UIKit                               0x002c042e UIApplicationMain + 1160
    38  FairCom                             0x00001be0 main + 102
    39  FairCom                             0x00001b71 start + 53
    40  ???                                 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
sharedlibrary apply-load-rules all
(gdb) 

感谢您的帮助!

【问题讨论】:

This class is not key value coding-compliant for the key 的可能重复项 【参考方案1】:

您正在加载一个笔尖。在那个笔尖中,您有一个名为productWebView 的插座,它已连接到网络视图。您看到的异常是告诉您插座productWebView 实际上并不存在。这就是它变得奇怪的地方。该错误表明对象&lt;UIViewController 0x4d06eb0&gt; 是缺少此出口的对象。奇怪的是它说UIViewController,而不是实际视图控制器子类的名称。听起来您有一个 nib,其中 File's Owner 设置为您的视图控制器子类之一,但在运行时您实际上只是直接使用 UIViewController 的实例。您应该验证在标签栏控制器中表示标签的所有视图控制器都是UIViewController 的实际正确子类,而不仅仅是UIViewController 本身的实例。

【讨论】:

谢谢!我回去查看了我的 UITabBarItems,它们没有设置为任何特定的 nib/class,所以奇怪它们为什么会起作用!

以上是关于UIWebView 抛出 NSUnknownKeyException iPad的主要内容,如果未能解决你的问题,请参考以下文章

将 webview 请求抛出到另一个 webview

WKWebView web worker 抛出错误“Dom Exception 18 返回错误”。

WKWebview 的 javascript 调用返回 nil

swift - UIWebView 和 WKWebView(iOS12 之后替换UIWebView)

调整 UIWebView 框架大小时如何禁用 UIWebView 调整内容大小

如何在 UIWebView 上显示覆盖而不阻止用户与 UIWebView 的交互