2010-08-17 14 views
14

En mi aplicación, MFMailComposeViewController funciona bien pero falla la creación de una nueva instancia de MFMessageComposeViewController.MFMessageComposeViewController alloc returns nil

Este es el código para ambos:

-(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]; 
} 

Su aparentemente obvio que todo lo que es la vinculación correctamente porque el controlador de vista de correo electrónico funciona bien. ¿Hay algo que me estoy perdiendo, tal vez en cuanto a la configuración?

Respuesta

42

¿Has visto +[MFMessageComposeViewController canSendText]?

Desde el MFMessageComposeViewController Class Reference,

Antes de presentar un mensaje de vista de la composición, llame al método canSendText clase para asegurar que el dispositivo del usuario está configurado adecuadamente. No intente presentar una vista de composición de mensaje si el método canSendText devuelve NO. Si la entrega de SMS no está disponible, puede notificar al usuario o simplemente desactivar las funciones de SMS en su aplicación.

A partir de iOS 5, puede registrarse para recibir notificaciones de cambios en la disponibilidad del envío de mensajes de texto a través de la notificación MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification.

razones por las que podría estar regresando nil:

  • dispositivo no se está ejecutando IOS 4.
  • dispositivo es un iPod Touch/iPad sin iMessage habilitado.
  • ¿Sin tarjeta SIM? (La vista ahora se muestra en iOS 6; la aplicación no recibe notificación de la falla en el envío del mensaje.)
  • "Dispositivo" es en realidad el simulador. (Tal vez esto funciona en iOS 6 también.)

Del mismo modo, [[MFMailComposeViewController alloc] init] vuelve nil cuando se habilitan no hay cuentas de correo (se puede probar rápidamente este mediante la desactivación de cuentas en la configuración), sino que también muestra un "No hay cuentas de correo configuradas" alerta para ti MFMessageComposeViewController no hace esto.

+0

Excelente, gracias. Probablemente debería haber sido más claro en que surge el problema con el simulador, que obviamente no tiene capacidad para SMS. – Lee

+0

Si no hay una tarjeta SIM, la aplicación se cierra. ¿por qué? simplemente muestra un mensaje emergente "no hay tarjeta SIM presente". el evento envía un resultado enviado por SMS al método de delegado. luego sale. ¿Hay alguna forma de evitar que salga? – karim

+0

¿Has revisado la consola por mensajes? ¿Se cuelga o sale "normalmente"? ¿Hay un registro de bloqueo? ¿Ayuda la instalación de un depurador? –

Cuestiones relacionadas