【问题标题】:MFMessageComposeViewController Initialization in SwiftSwift 中的 MFMessageComposeViewController 初始化
【发布时间】:2014-12-17 01:40:42
【问题描述】:

我目前正在开发一个应用程序,我希望能够发送 SMS 消息以确认用户拥有他们发送的号码。然后我做一些后端工作并查询服务器以查看号码是否已经过验证。

唯一的问题是我无法发送短信。我能找到的唯一在线教程和文档是 Objective-C。

我已尽我所能复制了它,但是有一部分我也找不到 Swift 等价物。 “初始化”。

func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {

    if (result.value == MessageComposeResultCancelled.value) {
        NSLog("Message was cancelled.");
    }
    else if (result.value == MessageComposeResultFailed.value) {
        var warningAlert : UIAlertView = UIAlertView.alloc();
        warningAlert.title = "Error";
        warningAlert.message = "Failed to send SMS!";
        warningAlert.delegate = nil;
        warningAlert.show();
        NSLog("Message failed.");
    } else {
        NSLog("Message was sent.");
    }
    self.dismissViewControllerAnimated(true, completion: nil);
}

func showSMS() {
    if (!MFMessageComposeViewController.canSendText()) {
        var warningAlert : UIAlertView = UIAlertView.alloc();
        warningAlert.title = "Error";
        warningAlert.message = "Your device does not support SMS.";
        warningAlert.delegate = nil;
        warningAlert.show();
        return;
    }

    var recipients : NSArray = ["1234567890"];
    var message : NSString = "Message.";


    // This is the problem line I think....
    let messageController : MFMessageComposeViewController = MFMessageComposeViewController.alloc();

    /* In Objective-C it is: */
    // MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];

    // I have also tried this...
    let messageC : MFMessageComposeViewController! = MFMessageComposeViewController();


    messageController.messageComposeDelegate = self;
    messageController.recipients = recipients;
    messageController.body = message;

    self.presentViewController(messageController, animated: true, completion: nil);
}

我相信问题是当我运行它时 MFMessageComposeViewController 没有完全实例化。因此,当它点击此代码时,屏幕不会打开消息对话框,而是会变黑。我发现这是在 Objective-C 中未初始化同一行时的问题。

提前感谢您的帮助。

【问题讨论】:

    标签: ios swift sms init messages


    【解决方案1】:

    在 Swift 中, 初始化:

     let smsComposer:MFMessageComposeViewController = MFMessageComposeViewController()
    

    别忘了设置委托:

      smsComposer.messageComposeDelegate = self
    

    Objective -c Repo

    Swift Repo

    Apple docs

    【讨论】:

      【解决方案2】:

      你说的很对。它永远不会被init-ed — 因为你永远不会init-ing 它。你打电话给alloc,这是错误的。

      从不在 Swift 中调用 alloc。好吧,你可能会,但通常不会。只需初始化。像这样:

      let messageController = MFMailComposeViewController()
      

      这实际上是对init 的调用,这正是您想要的。

      (在深入了解之前,您可能需要停下来阅读 Swift 语言以及它如何调用初始化程序,因为您显然在代码中的任何地方都这样做是完全错误的。)

      【讨论】:

      • 好吧...我发誓我确实试过了。我来自 Java 背景,所以我先尝试了它,但它似乎没有用。然而它确实……太棒了。谢谢你好先生!
      • 在 Swift 中你曾经alloc的唯一一次可能是在使用 UnsafeMutablePointer 创建内存缓冲区时。
      猜你喜欢
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2014-12-21
      相关资源
      最近更新 更多