【问题标题】:Can't set recipients of MFMessageComposeViewController?无法设置 MFMessageComposeViewController 的收件人?
【发布时间】:2011-07-31 08:28:26
【问题描述】:

我有这样的方法:

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;

        }

    }

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

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    iOS 10.0 就在这里,这对我来说仍然是个问题。因此,我制定了一种解决方法。 根据以前的 cmets,在 viewDidLoad() 中初始化 MFMessageComposeViewController 不会解决问题(我可以证明),除非视图控制器被呈现,否则它不会被缓存。所以,这里的技巧是创建一个窗口,设置它的根视图控制器,呈现一个 dummy 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(无论你如何尝试隐藏控制器的视图等等),由于当前的消息正文选择。但是将其添加到不在视图周期中的全新窗口中,它将被正确初始化,并且在视图中不会有此类事务的痕迹。另外,您不会以这种方式过多地混淆内存(因为控制器的范围现在应该是最小的)并且您可以随时初始化您的 actual MFMessageComposeViewController 并更快地获得它现在。如果您的应用程序严重依赖MFMessageComposeViewController(我对此表示怀疑),您可以将其移至您的 AppDelegate 以便在应用程序生命周期的任何地方做好准备。 干杯, M.

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        试试这个。

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

        【讨论】:

          【解决方案4】:

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

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

          试试这个。

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

              好的,我回答了我自己的问题。现在我不希望其他人必须经历这个。我只是从一个 NSObject 调用这个方法。它是 MFMessageComposeViewControllerDelegate 的代表,但这没有任何区别。我不得不把这个方法移到我的 MainViewController 中,然后它就起作用了。

              【讨论】:

                【解决方案7】:

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

                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/

                祝你好运!

                【讨论】:

                • 如果你还不能解决你的问题,我已经分享给你一个链接匹配你的代码与那个教程
                • 那么问题出在其他地方问题不在于代码
                【解决方案8】:

                试试这个

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

                【讨论】:

                  猜你喜欢
                  • 2014-05-08
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-08-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多