2012-03-13 55 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,以便用户知道应用程序正在响应。