“无法识别的选择器发送到实例”,即使 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,无法识别的选择器发送到实例 - 但在哪一行?

斯威夫特:“无法识别的选择器发送到实例”,Xcode 9.4.1

UIImageView |无法识别的选择器发送到实例 | Xcode 6.4 | iOS 8.4

Xcode -[__NSArrayM isEqualToString:]:无法识别的选择器发送到实例 0x7a1248d0 - 如何修复?

Swift:手势识别器无法识别的选择器发送到实例

[UIView collectionView:numberOfItemsInSection:]: 无法识别的选择器发送到实例