2016-10-19 8 views
0

自分のプロジェクトの電話番号にメッセージを送信しても問題ありません。 buttonをクリックすると、メッセージ送信ページがポップアップします。メッセージを送信するか、Cancelをクリックすると、メッセージは返されます。ここでもう一度ボタンをクリックすると、何も起こりません.3回目にクリックすると、アプリがクラッシュします。コンソールの情報はafterScreenUpdatesの使用:NOをUse afterScreenUpdates:YESに変更するように指示しました。だから私のコードにcontroller.view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)を追加しましたが、うまくいきませんでした。ここで何を変える必要がありますか?コンソールで3回目にボタンをクリックしたときにメッセージが送信されなくなるのはなぜですか?

Cannot snapshot view (<UIKeyboardImpl: 0x101a224f0; frame = (0 0; 320 216); layer = <CALayer: 0x170622880>>) with afterScreenUpdates:NO, because the view is not in a window. Use afterScreenUpdates:YES. 

マイコード:

import UIKit 
import MessageUI 

class ViewController: UIViewController, MFMessageComposeViewControllerDelegate { 

let messageVC = MFMessageComposeViewController() 

var phoneNumber = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

    messageVC.messageComposeDelegate = self 
}  

@IBAction func sendMessageTapped(_ sender: AnyObject) { 

     let recipient = self.phoneNumber // I get self.phonenumber from other code, no problem. 

     messageVC.body = "" 
     messageVC.recipients = [recipient] 

    self.present(messageVC, animated: true, completion: nil) 

} 


func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { 
    // I added this line to fix, didn't work. 
// controller.view.drawHierarchy(in: view.bounds, afterScreenUpdates: true) 


    switch result.rawValue { 

    case 0 : 

     print("Sending Message cancelled") 

     messageVC.dismiss(animated: true, completion: nil) 

    case 1: 

     print("Message sent") 
     messageVC.dismiss(animated: true, completion: nil) 

    case 2: 

     print("Sending message failed") 
     messageVC.dismiss(animated: true, completion: nil) 

    default: 
     break 
    } 
    } 


} 

答えて

0

私は個人的にMFMessageComposeViewControllerを使用していないが、エラーを見ていると、私はそれが提示されているようではないかもしれないという推測を行うことができます一回以上。 MFMessageComposeViewControllerインスタンスをメモリに保存して再利用する代わりに、そのインスタンスを表示しようとしたときにのみ作成しようとしましたか?

+0

答えよりもコメントが多いようです。しかし*良い*コメント。 :) –

+0

それはちょうど私がSOを使用する方法を示す; – dlbuckley

+0

@ dlbuckley良い推測!ボタンをクリックすると、MFMessageComposeViewControllerインスタンスが作成されました。今それは正常に動作します!ありがとう。 – developermike

1

同じ問題が発生します。それは私の仕事です。

func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { 
    controller.dismiss(animated: true, completion: nil) 
    messageVC = MFMessageComposeViewController() 
} 
関連する問題