无法识别的选择器从Utility App导航控制器视图发送到实例错误

时间:2011-12-06 12:13:55

标签: ios utility mfmailcomposer

我有一个实用程序。我在反面实现了这个代码,它调用反馈视图来发送电子邮件,例如tutorial。这有效,但是当我点击发送反馈UIButton时,我的应用程序立即崩溃*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController sendMail]: unrecognized selector sent to instance 0x89c1960'.

我检查过这些事情:

我已正确声明了委托并为MailComposer实现了它。

我的方法sendMail连接到按钮的TouchUp事件。

我的方法名称同意:

- (IBAction)sendMail;

- (IBAction)sendMail 
{
if ([MFMailComposeViewController canSendMail]) 
{
    MFMailComposeViewController *mfViewController = [[MFMailComposeViewController alloc] init];
    mfViewController.mailComposeDelegate = self;

    [self presentModalViewController:mfViewController animated:YES];

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

    [alert show];
}

}

代码没有事件到达此方法,因为我在方法实现的顶部设置了断点,但是没有被调用。 ViewDidLoad的断点也没有被激活。

密切关注这个错误:

reason: '-[UIViewController sendMail]: unrecognized selector sent to instance 

似乎期待一个名为sendMail的视图控制器而不是一个方法。我读了这个看似非常相似的post,但我没有在xib Identity下拉列表中看到任何其他视图控制器名称。我认为这是我的问题的一部分,但我不知道如何解决它。

也许我应该通过viewcontroller呈现MFMailComposer?如果是这样,我不知道该怎么做。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您错误地将类型UIViewController分配给自定义视图控制器。您应该选择实际应用于自定义视图控制器的类类型(包含方法实现sendMail的类型)。

您的代码/设置存在的问题是您的自定义视图控制器使用类型UIViewController进行实例化。但是,UIViewController没有实现任何名为sendMail的方法,因此你得到一个例外。

由于您没有指定自定义视图控制器的类名,因此我只想假设一个这个答案; MyCustomViewController

由于您似乎使用InterfaceBuilder来设置这些内容,因此可以使用它将视图控制器的类型更改为MyCustomViewController

enter image description here

修改

从您的评论中,我可以看到您实际使用代码实例化视图控制器。在这种情况下,用这个替换你的方式:

MyCustomViewController *controller = [[MyCustomViewController alloc] initWithNibName:@"ExMobSendFeedback" bundle:nil]; 
controller.title = @"Feedback"; 
[self.navigationController pushViewController:controller animated:YES];
[controller release];