无法设置MFMessageComposeViewController的收件人?

时间:2011-04-07 03:57:08

标签: iphone objective-c ios

我有这样的方法:

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;

        }

    }

邮件编辑器已打开,但收件人和邮件正文为空(下图)。有人知道我该如何解决它:(

enter image description here

8 个答案:

答案 0 :(得分:3)

选择这些,然后检查可能会解决您的问题

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/

祝你好运!

答案 1 :(得分:2)

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

答案 2 :(得分:1)

iOS 10.0就在这里,这对我来说仍然是一个问题。所以,我已经制定了一个解决方法。 根据之前的评论,初始化MFMessageComposeViewController中的viewDidLoad()将无法解决问题(我可以证明),除非显示视图控制器,否则不会缓存它。所以,这里的黑客是创建一个窗口,设置它的根视图控制器,呈现一个虚拟 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,以便在应用程序生命周期的任何地方做好准备。 干杯, 微米。

答案 3 :(得分:0)

试试这个

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

}

答案 4 :(得分:0)

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

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

试试这个。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

试试这个。

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

答案 7 :(得分:0)

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

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