“无法识别的选择器发送到实例”,即使 XCode 说实例是正确的类型
Posted
技术标签:
【中文标题】“无法识别的选择器发送到实例”,即使 XCode 说实例是正确的类型【英文标题】:"Unrecognized selector sent to instance", even though XCode says the instance is the right type 【发布时间】:2013-09-24 20:26:22 【问题描述】:在 Mac 桌面应用程序中,我收到“无法识别的选择器发送到实例”错误。
这是导致错误的行:
My_WebView *mvw = [mWebView Loadhtml];
下面是相关的类定义:
My_WebView.h
#import <WebKit/WebKit.h>
@interface My_WebView : WebView
- (My_WebView *) LoadHtml; // initialize the WebView with a page
@end
My_WebView.mm
#import "My_WebView.h"
@implementation My_WebView
- (My_WebView *) LoadHtml
NSLog(@"Loading HTML...");
// do stuff...
return self;
@end
当我在 XCode 调试器中运行我的代码并在有问题的行中断时,我被告知 mWebView
是预期的类型 (My_WebView
)。这排除了许多similarquestionsI've seen here中发现的问题。
有谁知道我做错了什么?
【问题讨论】:
你是如何实例化 mWebView 的?你在检查 mWebView 不是 nil 吗? 你真的记录了实例吗,你看到的类型可能是骗人的…… 我会尝试...如何记录实例? (我是一个主要的 Cocoa 新手。) 回复:记录,好的,知道了:NSLog(@"mWebView: %@", mWebView);
我会试试然后回复你。
或来自调试器,po mWebView
(假设您位于可访问mWebView
的堆栈帧中)。您可以使用po
(用于对象)或p
(用于非对象)记录任何表达式的结果。
【参考方案1】:
我想通了。我很困惑。实例不是正确的类型!
XCode 调试器说mWebView
是一个指向My_WebView
的指针。
mWebView My_WebView * 0x000000010e0884c0
这让我错误地认为My_WebView
也是mWebView
的运行时类型。事实并非如此,正如 NSLog(@"mWebView: %@", mWebView);
和 po mWebView
透露的那样。
mWebView: <WebView: 0x1180ca4c0>
mWebView
实际上只是一个普通的旧可可WebView
。这就是它没有回复LoadHTML
消息的原因。问题解决了。
【讨论】:
以上是关于“无法识别的选择器发送到实例”,即使 XCode 说实例是正确的类型的主要内容,如果未能解决你的问题,请参考以下文章
斯威夫特:“无法识别的选择器发送到实例”,Xcode 9.4.1
UIImageView |无法识别的选择器发送到实例 | Xcode 6.4 | iOS 8.4
Xcode -[__NSArrayM isEqualToString:]:无法识别的选择器发送到实例 0x7a1248d0 - 如何修复?
[UIView collectionView:numberOfItemsInSection:]: 无法识别的选择器发送到实例