2010-08-17 11 views
14

W mojej aplikacji, MFMailComposeViewController działa dobrze, ale tworzenie nowej instancji MFMessageComposeViewController kończy się niepowodzeniem.Przydział MFMessageComposeViewController zwraca zero

Oto kod dla obu:

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

pozornie oczywiste, że wszystko jest z linkami poprawnie ponieważ kontroler widok email działa dobrze. Czy jest coś, czego mi brakowało, może konfiguracja jest mądra?

Odpowiedz

42

Czy sprawdziłeś numer +[MFMessageComposeViewController canSendText]?

Z MFMessageComposeViewController Class Reference,

Przed przedstawieniem wiadomość widok składu, należy wywołać metodę canSendText klasy, aby zapewnić, że urządzenie użytkownika jest odpowiednio skonfigurowana. Nie próbuj prezentować widoku kompozycji wiadomości, jeśli metoda canSendText zwróci NIE. Jeśli dostarczenie SMS-ów nie jest dostępne, możesz powiadomić użytkownika lub po prostu wyłączyć funkcje SMS w aplikacji.

Począwszy od systemu iOS 5, można się zarejestrować, aby otrzymywać powiadomienia o zmianach w dostępności wiadomości tekstowej, wysyłając powiadomienie MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification.

powodów może być powracający nil:

  • Urządzenie nie jest systemem iOS 4.
  • urządzenia jest iPod Touch/iPad bez iMessage włączona.
  • Brak karty SIM? (Widok jest teraz wyświetlany na iOS 6, aplikacja nie jest powiadamiana o niepowodzeniu wysyłania wiadomości.)
  • "Urządzenie" jest w rzeczywistości symulatorem. (Może to działa w iOS 6 też.)

Podobnie [[MFMailComposeViewController alloc] init] powraca nil gdy są włączone żadne kont pocztowych (możesz szybko sprawdzić to poprzez wyłączenie kont w ustawieniach), ale także pokazuje „skonfigurowany Brak konta pocztowe” ostrzeżenie dla ciebie. MFMessageComposeViewController tego nie robi.

+0

Doskonale, dzięki. Prawdopodobnie powinienem był wyjaśnić, że problem pojawia się przy użyciu symulatora, który oczywiście nie ma możliwości wysyłania wiadomości SMS. – Lee

+0

Jeśli nie ma karty SIM, aplikacja zostaje zamknięta. czemu? po prostu wyświetla komunikat "brak karty SIM". to wydarzenie wysyła wynik wysłanej wiadomości SMS do metody delegata. następnie wychodzi. czy jest jakiś sposób, aby uniemożliwić mu wyjście? – karim

+0

Czy sprawdziłeś konsolę dla wiadomości? Czy to się zawiesza, czy wychodzi "normalnie"? Czy istnieje dziennik awarii? Czy dołączenie debuggera jest pomocne? –

Powiązane problemy