菜鸟教程小白 发表于 2022-12-13 10:06:43

ios - 从实用程序应用导航 Controller View 发送到实例错误的无法识别的选择器


                                            <p><p>我有一个实用程序。我在反面实现了这段代码,它调用一个反馈 View 来发送电子邮件,就像这样 <a href="http://www.iostipsandtricks.com/using-apples-mail-composer/" rel="noreferrer noopener nofollow">tutorial</a> .这可行,但是当我单击发送反馈 UIButton 时,我的应用程序立即崩溃并显示 <code>*** 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'-: unrecognized selector sent to instance 0x89c1960 '.</code></p>

<p>我已经检查了这些东西:</p>

<p>我已经正确声明了委托(delegate)并为 MailComposer 实现了它。</p>

<p>我的方法 sendMail 连接到按钮的 TouchUp 事件。</p>

<p>我的方法名称同意:</p>

<pre><code>- (IBAction)sendMail;
</code></pre>

<p>和</p>

<pre><code>- (IBAction)sendMail
{
if ()
{
    MFMailComposeViewController *mfViewController = [ init];
    mfViewController.mailComposeDelegate = self;

    ;

}
else
{
    UIAlertView *alert = [ initWithTitle:@&#34;Status:&#34; message:@&#34;Your phone is not currently configured to send mail.&#34; delegate:nil cancelButtonTitle:@&#34;ok&#34; otherButtonTitles:nil];

    ;
}
</code></pre>

<p>}</p>

<p>代码没有到达这个方法,因为我在方法实现的顶部设置了一个断点,但没有被调用。 ViewDidLoad 处的断点也没有被激活。</p>

<p>仔细查看这个错误:</p>

<pre><code>reason: &#39;-: unrecognized selector sent to instance
</code></pre>

<p>它似乎需要一个名为 sendMail 而不是方法的 ViewController 。我读到了 <a href="https://stackoverflow.com/questions/5843217/unrecognized-selector-sent-to-instance" rel="noreferrer noopener nofollow">post</a>这看起来非常相似,但我在 xib Identity 下拉列表中看不到任何其他 ViewController 名称。我认为这是我的问题的一部分,但我不知道如何解决它。</p>

<p>也许我应该通过 ViewController 展示 MFMailComposer?如果是这样,我不知道该怎么做。</p>

<p>任何建议将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您错误地将类型 <code>UIViewController</code> 分配给您的自定义 ViewController 。您应该选择实际应用于您的自定义 ViewController 的类类型(包含方法实现 <code>sendMail</code> 的类类型)。</p>

<p>您的代码/设置的问题在于您的自定义 ViewController 被实例化为 <code>UIViewController</code> 类型。但是,UIViewController 没有实现任何名为 <code>sendMail</code> 的方法,因此会出现异常。</p>

<p>由于您没有指定自定义 ViewController 的类名,因此为了这个答案,我将简单地假设一个; <code>MyCustomViewController</code></p>

<p>由于您似乎使用 InterfaceBuilder 来设置这些东西,因此请使用它将 ViewController 的类型更改为 <code>MyCustomViewController</code>。</p>

<p> <img src="/image/iFzHY.png" alt="enter image description here"/> </p>

<p>编辑</p>

<p>从您的评论中,我可以看到您实际上使用代码实例化了 ViewController 。在这种情况下,请用以下方式替换您的方式:</p>

<pre><code>MyCustomViewController *controller = [ initWithNibName:@&#34;ExMobSendFeedback&#34; bundle:nil];
controller.title = @&#34;Feedback&#34;;
;
;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从实用程序应用导航 ControllerView 发送到实例错误的无法识别的选择器,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/8399695/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/8399695/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从实用程序应用导航 Controller View 发送到实例错误的无法识别的选择器