MFMessageComposeViewController alloc возвращает ноль - PullRequest
17 голосов
/ 17 августа 2010

В моем приложении 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 Ответ

46 голосов
/ 17 августа 2010

Вы проверили +[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 не делает этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...