Нераспознанный селектор отправлен на ошибку экземпляра из представления контроллера навигации Utility - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть служебное приложение.Я реализовал этот код с обратной стороны, который вызывает представление обратной связи для отправки электронного письма, например, учебник .Это работает, но затем, когда я нажимаю кнопку UIB «Отправить отзыв», мое приложение сразу падает с *** 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, а не метод.Я прочитал эту запись , которая кажется очень похожей, но я не вижу никаких других имен контроллеров представлений в раскрывающемся списке XIB Identity.Я думаю, что это часть моей проблемы, но я не уверен, как ее исправить.

Может быть, я должен представить MFMailComposer через viewcontroller?Если это так, я не уверен, как это сделать.

Любые предложения будут оценены.

1 Ответ

3 голосов
/ 06 декабря 2011

Вы неправильно присвоили тип UIViewController своему пользовательскому контроллеру вида. Вы должны выбрать тип класса, который фактически применяется к вашему пользовательскому контроллеру представления (тот, который содержит реализацию метода sendMail).

Проблема с вашим кодом / настройкой заключается в том, что ваш пользовательский контроллер представления создается с типом UIViewController. Но UIViewController не реализует никакой метод с именем sendMail, поэтому вы получаете исключение.

Поскольку вы не указываете имя класса своего пользовательского контроллера представления, я просто приму его для ответа; MyCustomViewController

Поскольку вы, похоже, используете InterfaceBuilder для настройки этих вещей, используйте его, чтобы изменить тип контроллера вида в сторону MyCustomViewController.

enter image description here

EDIT

Из ваших комментариев я вижу, что вы на самом деле создаете экземпляр контроллера представления с помощью кода. В этом случае замените свой путь следующим:

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