2012-07-18 4 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

이 코드는 어딘가에 있어야한다고 생각합니다. 아마도 앱 위임자에서 공유되어 실행시 호출 되었습니까? 내가 어디 숨길 수 있는지 모르겠습니다. – Eric

+0

GCD를 사용하여 ... alloc ... init]이 아무런 문제없이 동시에 발생할 수 있는지 확인하려고했습니다. 자세한 내용은 내 두 번째 편집을 참조하십시오. –

0

동일한 문제가 있습니다. 컨트롤러를 정적 변수에 캐시하려고했습니다. 그러나 그것은 효과가 없었습니다. 잘못 행동했다. 처음 작업 할 때, 사용자 동작없이 자동으로 두 번째로 위임자가 호출되며 세 번째 화면이 검은 색으로 바뀝니다. 당신은 각각의 해고 후에 인스턴스를 만들어야하는 것처럼 보입니다!

수입 재단 수입 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)") 
     } 
    }