2014-10-21 2 views
0

В настоящее время я разрабатываю приложение, в котором хочу отправить SMS-сообщения, чтобы подтвердить, что у пользователя есть номер, из которого они отправляются. Затем я делаю некоторую работу на заднем плане и запрашиваю сервер, чтобы проверить, проверено ли число.Инициализация MFMessageComposeViewController в Swift

Единственная проблема в том, что я не могу отправить SMS. Единственные обучающие материалы и документация, которые я могу найти, это Objective-C.

Я скопировал его в меру своих возможностей, однако есть одна порция, в которой я тоже не могу найти эквивалент Swift. «Init».

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.

Заранее благодарим за помощь.

ответ

1

Вы совершенно правы. Это никогда не бывает init -ed - потому что вы никогда не init -в его. Вы звоните alloc, что неправильно.

Вы никогда позвонить alloc в Swift. Ну, ты можешь, но не нормально. Просто инициализируйте. Как это:

let messageController = MFMailComposeViewController() 

То есть, по сути, призыв к init это именно то, что вы хотите.

(Вы можете остановиться и прочитать на Swift язык и как он называет инициализаторами, прежде чем попасть в это дальше, так как вы явно делаете это совершенно неправильно везде в вашем коде.)

+0

Хорошо ... Я клянусь, что я сделал попробовать. Я родом из Java-фона, поэтому сначала пробовал, но, похоже, не работал. Однако это так ... так здорово. Спасибо, сэр! –

+0

Единственный раз, когда вы будете _ever_ сказать 'alloc' в Swift, вероятно, при создании буфера памяти с UnsafeMutablePointer. – matt

+0

извините, пришлось подождать. ура! –

0

В Swift , для инициализации:

let smsComposer:MFMessageComposeViewController = MFMessageComposeViewController() 

не забудьте установить делегат:

smsComposer.messageComposeDelegate = self 

Objective -c Repo

Swift Repo

Apple docs

Смежные вопросы