2012-03-13 32 views
0

我已經預先分配啓動時的郵件和消息控制器在我的應用程序委託,以節省初始化的時間(10秒),當用戶在使用我的應用程序...從郵件和消息控制器奇怪的行爲 - 預先初始化

__mailController = [[MFMailComposeViewController alloc] init]; 
__messageController = [[MFMessageComposeViewController alloc] init]; 

它第一次顯示控制器時工作正常,然後下一次消息沒有改變,舊的消息仍然顯示? ...控制器是否可能被釋放?奇怪的是,這些觀點正確地發揮作用,只是這個信息是不正確的?

- (IBAction)actionSMS:(id)sender { 

if([MFMessageComposeViewController canSendText]) 
{ 
    self.messageController.body = self.MessageDetail.text; 
//  controller.recipients = [NSArray arrayWithObjects:@"+919999999999", nil]; 
    [self presentModalViewController:self.messageController animated:YES]; 
} 
} 

回答

1

一旦MFMailComposeViewController和MFMessageComposeViewController呈現給用戶,您就不能更改它們顯示的內容。

MFMailComposeViewController Class Reference

重要的郵件撰寫界面本身並不定製 而不能使用你的應用程序進行修改。 此外,在 呈現界面之後,您的應用程序不允許對電子郵件內容進行進一步更改 。用戶仍然可以使用界面編輯 內容,但忽略編程式更改。 因此,您必須在呈現 接口之前設置內容字段的值。

這意味着這些值在您呈現控制器的那一刻以某種方式鎖定在MFM * ViewController的實現中。所以你不能重用這些viewControllers。 iOS不關心控制器是否與您的情況一樣不可見或不可見。如果顯示內容被鎖定。

我會弄清楚爲什麼需要10秒來分配它們。然後轉儲整個預先分配的東西。 10秒絕對要多。

+0

謝謝...我現在有代碼functionaly工作......但不得不刪除應用程序委託中的pre-init – rs2000 2012-03-13 17:53:49

0

我有同樣的問題。正如你發現的,MF控制器不僅僅是一次性使用,它們也不能在後臺被初始化,因爲它們的UI元素需要在主線程中初始化。

最後,我只是通過HUD展示UIActivityIndi​​catorView,以便用戶知道應用程序正在響應。