我有一个实用程序。我在反面实现了这个代码,它调用反馈视图来发送电子邮件,例如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?如果是这样,我不知道该怎么做。
任何建议都将不胜感激。
答案 0 :(得分:3)
您错误地将类型UIViewController
分配给自定义视图控制器。您应该选择实际应用于自定义视图控制器的类类型(包含方法实现sendMail
的类型)。
您的代码/设置存在的问题是您的自定义视图控制器使用类型UIViewController
进行实例化。但是,UIViewController没有实现任何名为sendMail
的方法,因此你得到一个例外。
由于您没有指定自定义视图控制器的类名,因此我只想假设一个这个答案; MyCustomViewController
由于您似乎使用InterfaceBuilder来设置这些内容,因此可以使用它将视图控制器的类型更改为MyCustomViewController
。
修改
从您的评论中,我可以看到您实际使用代码实例化视图控制器。在这种情况下,用这个替换你的方式:
MyCustomViewController *controller = [[MyCustomViewController alloc] initWithNibName:@"ExMobSendFeedback" bundle:nil];
controller.title = @"Feedback";
[self.navigationController pushViewController:controller animated:YES];
[controller release];