2010-08-17 9 views
14

Trong ứng dụng của tôi, MFMailComposeViewController hoạt động tốt nhưng việc tạo một cá thể mới của MFMessageComposeViewController không thành công.MFMessageComposeViewController alloc trả về nil

Đây là mã cho cả hai:

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

của nó dường như rõ ràng rằng tất cả mọi thứ được kết nối một cách chính xác bởi vì bộ điều khiển xem email hoạt động tốt. Có cái gì tôi thiếu có thể cấu hình khôn ngoan?

Trả lời

42

Bạn đã kiểm tra +[MFMessageComposeViewController canSendText] chưa?

Từ MFMessageComposeViewController Class Reference,

Trước khi trình bày một phần xem tin nhắn, gọi phương thức canSendText lớp để đảm bảo rằng thiết bị của người dùng được cấu hình một cách thích hợp. Không cố gắng trình bày chế độ xem thành phần tin nhắn nếu phương thức canSendText trả về NO. Nếu tính năng gửi SMS không khả dụng, bạn có thể thông báo cho người dùng hoặc chỉ cần tắt tính năng SMS trong ứng dụng của mình.

Bắt đầu từ iOS 5, bạn có thể đăng ký để được thông báo về các thay đổi đối với tính khả dụng của tin nhắn văn bản được gửi bằng cách thông báo MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification.

lý do nó có thể được trở về nil:

  • Thiết bị không chạy iOS 4.
  • Device là một iPod Touch/iPad mà không iMessage kích hoạt.
  • Không có thẻ SIM? (Chế độ xem hiện hiển thị trong iOS 6; ứng dụng không được thông báo về lỗi gửi tin nhắn.)
  • "Thiết bị" thực sự là trình giả lập. (Có lẽ công trình này trong iOS 6 quá.)

Tương tự, [[MFMailComposeViewController alloc] init] lợi nhuận nil khi không có các tài khoản email được kích hoạt (bạn có thể nhanh chóng kiểm tra điều này bằng cách vô hiệu hóa tài khoản trong Cài đặt), nhưng cũng cho thấy một "Không tài khoản email được cấu hình" cảnh báo cho bạn. MFMessageComposeViewController không làm điều này.

+0

Tuyệt vời, cảm ơn. Tôi có lẽ nên có được rõ ràng hơn trong đó vấn đề phát sinh bằng cách sử dụng giả lập, mà rõ ràng là không có khả năng tin nhắn SMS. – Lee

+0

Nếu không có thẻ SIM, ứng dụng sẽ thoát. tại sao? nó chỉ đưa ra một thông điệp bật lên "không có thẻ sim hiện tại". sự kiện này gửi một kết quả gửi SMS đến phương thức ủy nhiệm. sau đó thoát ra. có cách nào để ngăn chặn nó thoát ra không? – karim

+0

Bạn đã kiểm tra bảng điều khiển cho tin nhắn chưa? Nó có bị sập hoặc thoát ra "bình thường" không? Có nhật ký sự cố không? Có đính kèm một trình gỡ lỗi giúp đỡ? –