来自邮件和消息控制器的奇怪行为 - 预先初始化

时间:2012-03-13 08:16:51

标签: objective-c ios cocoa-touch mfmailcomposeviewcontroller

我已经预先在我的应用代理中分配了邮件和消息控制器,以便在用户使用我的应用程序时保存初始化时间(超过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];
}
}

2 个答案:

答案 0 :(得分:1)

向用户显示MFMailComposeViewController和MFMessageComposeViewController后,您无法更改其显示的内容。

MFMailComposeViewController Class Reference

  

重要事项邮件撰写界面本身不可自定义   并且不得被您的申请修改。 此外,之后   提供界面,不允许您的申请   进一步更改电子邮件内容。用户可能仍在编辑   使用界面的内容,但程序化更改将被忽略。   因此,您必须在呈现之前设置内容字段的值   接口

这意味着在您呈现控制器时,这些值在某种程度上被锁定在MFM * ViewController的实现中。所以你不能重用这些viewControllers。 iOS并不关心控制器是否与您的情况一样不可见。如果出现,则内容被锁定。

我想弄清楚为什么分配它们需要10秒钟。然后转储整个预分配的东西。 10秒肯定是很多。

答案 1 :(得分:0)

我遇到了同样的问题。 MF控制器不仅仅适合一次性使用,正如您所发现的那样,它们也无法在后台初始化,因为它们的UI元素需要在主线程中初始化。

最后,我只是通过HUD呈现UIActivityIndi​​catorView,这样用户就会知道该应用正在响应。