странное поведение контроллера почты и сообщений - предварительно инициализировано - PullRequest
0 голосов
/ 13 марта 2012

Я предварительно выделил контроллеры почты и сообщений при запуске в моем делегате приложения, чтобы сэкономить время инициализации (более 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 ]

1 голос
/ 13 марта 2012

После того, как пользователю будут представлены MFMailComposeViewController и MFMessageComposeViewController, вы не сможете вносить изменения в отображаемый контент.

Описание класса MFMailComposeViewController :

Внимание! Сам интерфейс составления почты не настраивается и не должны быть изменены вашим приложением. Кроме того, после представление интерфейса, ваше приложение не может сделать дальнейшие изменения в содержании электронной почты. Пользователь все еще может редактировать содержимое с использованием интерфейса, но программные изменения игнорируются. Таким образом, вы должны установить значения полей содержимого перед представлением интерфейс.

Это означает, что эти значения каким-то образом заблокированы в реализации MFM * ViewController в тот момент, когда вы представляете контроллер. Таким образом, вы не можете повторно использовать эти viewControllers. iOS не волнует, является ли контроллер, как в вашем случае, невидимым или нет. Если он представлен, контент заблокирован.

Я бы выяснил, почему на их выделение уходит 10 секунд. А потом выбросить всю эту штуку перед выделением. 10 секунд определенно много.

0 голосов
/ 13 марта 2012

У меня была такая же проблема.Как вы обнаружили, контроллеры MF хороши не только для однократного использования, но они также не могут быть инициированы в фоновом режиме, поскольку их элементы пользовательского интерфейса необходимо инициировать в главном потоке.

ВВ конце я просто представляю UIActivityIndicatorView через HUD, чтобы пользователи знали, что приложение отвечает.

...