2012-07-18 15 views
5
if([MFMessageComposeViewController canSendText]) 
{ 
    MFMessageComposeViewController *sms_message_vc = [[MFMessageComposeViewController alloc] init]; 
    sms_message_vc.body = text; 
    sms_message_vc.recipients = recipients; 
    sms_message_vc.messageComposeDelegate = self; 
    [self presentModalViewController:sms_message_vc animated:FALSE]; 
    [[UIApplication sharedApplication] setStatusBarHidden:TRUE]; 
    [sms_message_vc release]; 
} 

これを実行すると、実際に作成画面が表示されるまでに数秒の遅延があります。これを引き起こしているとどのように遅れを取り除くために行くのですか?どのようにMFMessageComposeViewControllerのプレゼンテーションの遅延を排除するには?

EDIT 1:明確化:プロセスはUIがどこにあるかにかかわらず数秒間ハングするため、sms_message_vcとivarは役に立ちません。

EDIT 2:初期化を並行して実行しようとするGCD(優先度が異なる)を試してください。助けにはならなかった。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, (unsigned long)NULL), ^(void){ 
    sms_message_vc = [[MFMessageComposeViewController alloc] init]; 
    sms_message_vc.messageComposeDelegate = self; 
}); 
+0

はそれがあまりにも多くの時間をdalayですか? –

答えて

0

クラスのインスタンス変数sms_message_vc MFMessageComposeViewController *を作り、呼び出し考えてみましょう:

MFMessageComposeViewController *sms_message_vc = [[MFMessageComposeViewController alloc] init]; 

以前、selfへのデリゲートを設定するとともに、右sms_message_vc

は、それからちょうど行うINITING後:

sms_message_vc.body = text; 
sms_message_vc.recipients = recipients; 
[self presentModalViewController:sms_message_vc animated:FALSE]; 
[[UIApplication sharedApplication] setStatusBarHidden:TRUE]; 
[sms_message_vc release]; 

実際にメッセージを送信したいとき。これはそれをあまり変えてはいけませんが、一部を助けるかもしれません。

+0

それを試してみてください。そのアプローチの問題は、... alloc] init]が電話を実行すると何かを待っているだけです。ですから、それをivarにして、viewDidLoadの間に初期化すると、... alloc] initプロセスが起こるまであなたのビューはハングします。 –

+0

私はこのコードはどこかにあるはずだ、おそらくApp Delegateで共有されているので、起動時に呼び出されるのだろうか?他にどこを隠すことができないのか分かりません。 – Eric

+0

私はGCDを使って、... alloc] initを確認しようとしましたが、同時に利用できない可能性があります。詳細は私の2回目の編集を参照してください。 –

0

私は同じ問題があります。 コントローラを静的変数にキャッシュしようとしました。しかし、それは動作しませんでした。誤って行動した。初めての作業で、2回目のデリゲートはユーザーの操作なしで自動的に呼び出され、3回目の画面は黒くなります。あなたはそれぞれの解雇後にインスタンスを作成しなければならないように見えます!

輸入財団 輸入のUIKit 輸入MessageUI

class UIUtil { 

static var messageController:MFMessageComposeViewController? = nil 
static var checkedOnce = false 

class func createMessageController() -> MFMessageComposeViewController? { 
    if checkedOnce { 
     return messageController 
    } 
    checkedOnce = true 
    if (MFMessageComposeViewController.canSendText()) { 
     messageController = MFMessageComposeViewController() 
     messageController?.recipients = [SettingsManager.shared.switchPhoneNumber] 
    } else { 
     print("SMS services are not available in this device.") 
    } 
    return messageController 
} 

}

用法、

func createSMSView (text:String) { 
     print("Sending SMS to \(SettingsManager.shared.switchPhoneNumber). Text: \(text)") 
     if let ctr = UIUtil.createMessageController() { 
      ctr.body = text 
      ctr.messageComposeDelegate = self 
      self.present(ctr, animated: true, completion: nil) 
     } else { 
      print("Could not send SMS. Text: \(text)") 
     } 
    } 
関連する問題