Правильный способ отклонить MFMailComposeViewController - PullRequest
2 голосов
/ 26 сентября 2011

Я нахожусь в конце моего остроумия.Мне нужно отклонить MFMailComposeViewController, когда мое приложение переходит в фоновый режим, и я не могу этого сделать.В итоге создается неловкое состояние приложения.

Есть ли способ обработать это программно?Возможно, заставить контроллер представления поместить сообщение в папку «Черновики» и отклонить его без анимации?

РЕДАКТИРОВАТЬ:

Вызовы - dismissModalViewControllerAnimated: не работают должным образом.

Неловкое состояние приложения, о котором я говорю, - это мой основной вид, перерисовываемый поверх компоновщика электронной почты, когда приложение возвращается из фона.Модал никогда не отклоняется, и этот компоновщик электронной почты никогда не будет доступен снова.

РЕДАКТИРОВАТЬ:

Код в моем инициализаторе:

// For compatibility with iOS versions below 4.0
if (&UIApplicationDidEnterBackgroundNotification != NULL)
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackgroundNotification:) name:UIApplicationDidEnterBackgroundNotification object:nil];
}

Код в моем обработчике ввода фона:

- (void) applicationDidEnterBackgroundNotification:(NSNotification *)note {

  // Do some other stuff here

  // According to the docs, calling the method like this closes all
  //  child views presented modally
  [self dismissModalViewControllerAnimated:NO];
}

1 Ответ

0 голосов
/ 27 сентября 2011

Я воспроизвел простое приложение с кодом выше. Композитор почты корректно закрывается, когда приложение переходит в фоновый режим.

Поэтому я могу только предположить, что секция //Do some other stuff here вашего кода делает слишком много вещей, и ОС закрывает вас, прежде чем у вас есть шанс уволить композитора.

Согласно документам :

Вы должны выполнить любые задачи, связанные с настройкой пользовательского интерфейса, до выхода из этого метода, но другие задачи (например, сохранение состояния) следует переместить в параллельную очередь отправки или вторичный поток по мере необходимости. Поскольку вполне вероятно, что любые фоновые задачи, которые вы запускаете в applicationDidEnterBackground: не будут выполняться до тех пор, пока не завершится этот метод, вам следует запросить дополнительное время фонового выполнения перед запуском этих задач. Другими словами, сначала вызовите beginBackgroundTaskWithExpirationHandler: а затем запустите задачу в очереди отправки или во вторичном потоке.

Возможно, вам следует перенести другие вещи в другую ветку или запросить дополнительное время? Если вы удалите другие вещи, правильно ли уволит композитор?

...