2016-04-08 3 views
0

В моем приложении я разрешил пользователям входить в свои учетные записи для Pocket App. Pocket SDK переадресовывает процесс входа в систему Safari, и когда пользователь пытается войти в систему, происходит переход к просмотру моего приложения.iOS - Расписание UIAlertController будет отображаться после просмотра Переходы завершение

В то же время, мой UIViewController получает NSNotification что Войти либо успешно или безуспешно, и всякий раз, когда я пытаюсь показать UIAlertController, чтобы показать пользователю ли удалось это или нет, ничего не происходит, и я получаю следующее в моем журнале консоль:

Попытка загрузить вид контроллера представления во время его deallocating не допускается и может привести к непредсказуемому поведению

Я предполагаю, что это потому, что мой UIViewController пытается представить UIAlertController, пока мое приложение все еще переходит из Safari в мое представление.

Как это сделать, чтобы отобразить это UIAlertController ПОСЛЕ перехода к концу?

+0

обычно есть блок завершения для переходов, так просто вызвать ваше предупреждение от этого блока, если есть один. Если нет, вы можете поместить это предупреждение в viewDidAppear в свой диспетчер viewController, но обязательно добавьте флаг, чтобы проверить, был ли переход инициализирован, поэтому вы не показываете предупреждение все время. –

ответ

1

Проблема заключается в том, что вы (или UIAlertController) получаете доступ к свойству .view контроллера вида в неподходящее время. Доступ к .view неявно запускает loadView (а затем viewDidLoad) автоматически, когда представление не загружено (см. isViewLoaded).

У вас здесь много вариантов.

Самый простой, возможно, добавить свойство контроллера представления, чтобы указать, должно ли отображаться предупреждение. Когда вы наблюдаете уведомление, установите флаг в YES. Затем в -viewDidAppear: вы можете проверить флаг, показать предупреждение и перевернуть флаг на НЕТ.

Вы можете также добавить «короткое замыкание» проверить на месте, где получило уведомление, как:

if (self.isViewLoaded) { 
    // show alert now 
} else { 
    self.needsShowAlert = YES; 
}