2012-07-18 26 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]; 
} 

Khi điều này thực hiện, có độ trễ vài giây trước khi xem soạn được thực hiện. Điều gì gây ra điều này và làm thế nào để loại bỏ sự chậm trễ?Làm thế nào để loại bỏ độ trễ khi trình bày MFMessageComposeViewController?

CHỈNH SỬA 1: Làm rõ: Làm sms_message_vc và ivar không giúp đỡ vì quy trình ...alloc] init] sẽ treo giao diện người dùng trong vài giây, bất kể nó ở đâu.

EDIT 2: Cố gắng GCD (với các ưu tiên khác nhau) để cố gắng chạy khởi đồng thời. Không giúp:

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

Có dalay quá nhiều thời gian? –

Trả lời

0

Cân nhắc làm MFMessageComposeViewController * sms_message_vc một biến lớp dụ và gọi:

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

trước đó, cùng với việc thiết lập đại biểu để self ngay sau khi initing sms_message_vc

Sau đó chỉ cần làm :

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]; 

Khi bạn thực sự muốn gửi tin nhắn. Điều này không nên thay đổi quá nhiều nhưng có thể giúp một số.

+0

Đã thử. Vấn đề với cách tiếp cận đó là khi ... alloc] init] thực thi điện thoại chỉ đang chờ đợi một thứ gì đó. Vì vậy, làm cho nó một ivar và khởi tạo trong viewDidLoad, làm ví dụ, làm cho view của bạn bị treo cho đến khi quá trình ... alloc] init diễn ra. –

+0

Tôi đoán tất cả mã này phải ở đâu đó, có lẽ được chia sẻ trong App Delegate vì vậy nó được gọi khi khởi chạy? Tôi không chắc bạn có thể giấu nó ở đâu khác. – Eric

+0

Tôi thậm chí đã cố gắng sử dụng GCD để xem liệu ... alloc] init] có thể xảy ra đồng thời không có kết quả. Xem bản chỉnh sửa thứ hai của tôi để biết chi tiết. –

0

Tôi có cùng một vấn đề. Tôi đã cố gắng lưu bộ điều khiển trong một biến tĩnh. Nhưng nó không hoạt động. cư xử thất thường. Lần đầu tiên hoạt động, đại biểu lần thứ hai được gọi tự động mà không có bất kỳ tác vụ người dùng nào và màn hình thời gian thứ ba chuyển sang màu đen. Có vẻ như bạn phải tạo cá thể sau mỗi lần loại bỏ!

Foundation nhập khẩu MessageUI nhập khẩu UIKit nhập khẩu

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 
} 

}

sử dụng,

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)") 
     } 
    } 
Các vấn đề liên quan