ios - Swift 中的 MFMessageComposeViewController 初始化

标签 ios swift sms init message

我目前正在开发一个应用程序,我希望能够在其中发送 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 中初始化时,这就是问题所在。

在此先感谢您的帮助。

最佳答案

你说得很对。它永远不会被 init 编辑——因为您永远不会 init 编辑它。您正在调用 alloc,这是错误的。

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

let messageController = MFMailComposeViewController()

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

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

关于ios - Swift 中的 MFMessageComposeViewController 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26493340/

相关文章:

iOS 退出全屏后如何触发视频继续播放?

ios - 在应用程序进入后台时中断 SceneKit 场景

ios - 如何获取待处理的UNNotificationRequest的剩余时间?

swift - 管理同一部手机上多个用户的 APN 通知

java - 如何清除j2me midlet 连接http 和发送短信时的IOExceptionE 错误?

android - 如何在我的短信应用android中获取未读消息

ios - 在 swift 3 中从另一个 View 中选择某些内容后,更新一个打开的 View 中按钮中的文本

ios - XCode iPhone 模拟器看起来不像 iPhone

swift - 更改焦点时不读出辅助功能提示

java - 发送短信直至成功