无法设置MFMessageComposeViewController的收件人?

我有这样的方法:

void sendSMS{ if ([MFMessageComposeViewController canSendText]) { MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init]; picker.recipients = [NSArray arrayWithObject:@"0933660805"]; [picker setBody:@"Message body"]; picker.messageComposeDelegate = self; [self.navigationController presentModalViewController:picker animated:YES]; //[picker release]; return; } } 

消息编写器打开但收件人和邮件正文为空(下图)。 谁知道我该怎么办呢:(

在此处输入图像描述

去找这个,然后检查可能会解决你的问题

 void sendSMS { if ([MFMessageComposeViewController canSendText]) { MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init]; picker.messageComposeDelegate = self; NSString *bodyString = nil; NSMutableArray *toRecipients = [[NSMutableArray alloc]init]; [toRecipients addObject:@"0933660805"]; [picker setRecipients:(NSArray *)toRecipients]; [toRecipients release]; bodyString = [NSString stringWithFormat: @"Message body"]; [picker setBody:bodyString]; [self presentModalViewController:picker animated:YES]; [picker release]; } 

另请参阅本教程http://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/

祝你好运!

好的我回答了我自己的问题。 现在我希望没有其他人必须通过这个。 我只是从一个NSObject调用这个方法。 它是MFMessageComposeViewControllerDelegate的委托,但没有区别。 我不得不将此方法移动到我的MainViewController,然后它工作。

iOS 10.0在这里,这对我来说仍然是一个问题。 所以,我已经制定了一个解决方法。 根据之前的评论,在viewDidLoad()中初始化MFMessageComposeViewController将无法解决问题(我可以certificate),除非显示视图控制器,否则它不会被缓存。 所以,这里的hack是创建一个窗口,设置它的根视图控制器,呈现一个虚拟 MFMessageComposeViewController实例并立即将它解除,在你实际需要之前的某个地方(比如在viewDidLoad() )这是我正在使用的示例代码(Swift) 3.0 – 如果您对Obj-C对手感兴趣,请告诉我们:

 let window = UIWindow() let vc = UIViewController() window.rootViewController = vc let messageCompose = MFMessageComposeViewController() vc.present(messageCompose, animated: false) { [weak messageCompose] in messageCompose?.dismiss(animated: false, completion: nil) } 

这里的问题是,如果你将它呈现在当前活动窗口的视图控制器链中,它会通过突然显示和隐藏键盘来搞乱你的UI(无论你如何试图隐藏控制器的视图和什么不是),由于现在的消息体选择。 但是将它添加到一个不在视图循环中的全新窗口中,它将被正确初始化,并且在视图上不会有这样的事务跟踪。 另外,你不会以这种方式过多地记忆内存(因为控制器的范围现在应该是最小的)并且你可以随时初始化你的实际 MFMessageComposeViewController并且现在可以更快地获得它。 如果您的应用程序严重依赖于MFMessageComposeViewController (我怀疑),您可以将其移至AppDelegate,以便在应用程序生命周期的任何地方做好准备。 干杯,M。

尝试这个

 - (void)sendSMS { if ([MFMessageComposeViewController canSendText]) { MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init]; picker.messageComposeDelegate = self; NSString *bodyString = nil; NSArray *toRecipients = [NSArray arrayWithObject:@"NUMBER HERE"]; [picker setRecipients:toRecipients]; [self presentModalViewController:picker animated:YES]; [picker release]; } 

在我的情况下(在iPhone 3G上)问题是当我调用[self.navigationController pushViewController …]时,当我尝试调用[self presentModalViewController …]它工作,我不知道为什么,但它是。 尝试一下。

设置MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];

if ([MFMessageComposeViewController canSendText]) {...}之前if ([MFMessageComposeViewController canSendText]) {...}

尝试这个。

尝试这个。

 - (void)forwardPromo { MFMessageComposeViewController *composeViewController = [[MFMessageComposeViewController alloc] init]; composeViewController.body = @"Message body"; composeViewController.recipients = [NSArray arrayWithObject:@"0933660805"]; composeViewController.messageComposeDelegate = self; [self presentViewController:composeViewController animated:YES completion:nil]; } 

你应该在数组的末尾有一个“nil”:

 composeViewController.recipients = [NSArray arrayWithObject:@"0933660805", nil];