MFMessageComposeViewController alloc возвращает nil

В моем приложении MFMailComposeViewController отлично работает, но создание нового экземпляра MFMessageComposeViewController не выполняется.

Вот код для обоих:

-( IBAction)sendSMS: (id)sender
{
 MFMessageComposeViewController *picker = [[[MFMessageComposeViewController alloc] init] autorelease];
 picker.messageComposeDelegate = self;

 NSArray *toRecipients = [NSArray arrayWithObject: cell.currentTitle ]; 

 picker.recipients = toRecipients;

 [self presentModalViewController:picker animated:YES];
}

-( IBAction)sendEmail: (id)sender
{
 MFMailComposeViewController *picker = [[[MFMailComposeViewController alloc] init] autorelease];
 picker.mailComposeDelegate = self;

 NSArray *toRecipients = [NSArray arrayWithObject: email.currentTitle ]; 

 [picker setToRecipients:toRecipients];

 [self presentModalViewController:picker animated:YES];
}

Кажется очевидным, что все правильно связывается, потому что контроллер электронной почты отлично работает. Есть ли что-то, что я пропускаю, возможно, конфигурация мудрая?

Ответы

Ответ 1

Вы отметили +[MFMessageComposeViewController canSendText]?

Из Справочник класса MFMessageComposeViewController,

Прежде чем представить представление композиции, вызовите метод класса canSendText, чтобы убедиться, что пользовательское устройство настроено соответствующим образом. Не пытайтесь представить представление композиции, если метод canSendText возвращает NO. Если доставка SMS недоступна, вы можете уведомить пользователя или просто отключить функции SMS в своем приложении.

Начиная с iOS 5, вы можете зарегистрироваться, чтобы получать уведомления об изменениях в доступности отправки текстовых сообщений посредством уведомления MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification.

Причины, по которым он может вернуться nil:

  • Устройство не работает iOS 4.
  • Устройство - iPod Touch/iPad без включенного iMessage.
  • Нет SIM-карты? (Теперь представление отображается в iOS 6, приложение не уведомляется о сбое отправки сообщения.)
  • "Устройство" на самом деле является симулятором. (Возможно, это работает и в iOS 6).

Аналогично, [[MFMailComposeViewController alloc] init] возвращает nil, когда учетные записи не включены (вы можете быстро протестировать это, отключив учетные записи в настройках), но также показывает вам предупреждение "Нет настроенных учетных записей электронной почты". MFMessageComposeViewController этого не делает.