Добавление AlertView в viewWillAppear, iPhone
-
22-07-2019 - |
Вопрос
Я пытаюсь отобразить представление предупреждения, как только оно появится (без использования кнопки).В viewcontroller.m у меня есть:
- (void) viewWillAppear:(BOOL)animated
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"User Information" message: @"Hello"
delegate: self cancelButtonTitle:nil otherButtonTitles: @"Continue", nil];
[alert show];
[alert release];
}
и в viewcontroller.h у меня есть:
IBOutlet UIView *alert;
Я ничего не делал со своим файлом .xib.
При запуске на симуляторе я получаю в консоли следующее:
2009-11-30 23:41:36.079 BatteryApp[867:20b] *** Закрытие приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина:'-[UIViewController _loadViewFromNibNamed:bundle:] загрузил перо «BatteryAppViewController», но точка просмотра не была установлена.'
Есть идеи, где я ошибся, как-то связанный с моим xib?
Редактировать // Я подключаю оповещение к новому представлению в своем xib, но все равно безуспешно
Решение
Проблема заключается в том, что две основные анимации (одна для просмотра текущего представления и другая для отображения предупреждения) перекрываются. Эти два обхода анимации необходимо разделить, выполнив следующие действия:
<Ол> Код предупреждения должен быть в viewDidAppear
, а не в viewWillAppear
Вызовите [alert executeSelector: @selector (show) withObject: nil afterDelay: 0.0]
. Это гарантирует, что предупреждение появится после завершения текущей анимации.
Возможно, вам еще нужно быть осторожным при выпуске alert
. На вашем месте у меня был бы отдельный метод (например, showHelloAlert), а затем он вызывался бы из viewDidAppear:
- (void)viewDidAppear: (BOOL)animated {
[self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
[super viewDidAppear:animated];
}
Другие советы
Попробуйте поместить предупреждение в viewDidAppear.
Кроме того, для чего нужен iboutlet? Попробуйте вытащить все это.
Откройте файл xib в Интерфейсном Разработчике и управляйте перетаскиванием из владельца файла (который должен быть класса BatteryAppViewController
) в ваше представление (не предупреждение) и выберите представление из всплывающего меню , В журнале указано, что вы не установили это выходное соединение.
Вы не подключаете UIAlerts в Interface Builder.У оповещений нет настраиваемых перьев, поэтому вы не можете загрузить их в конструктор интерфейса.Вам необходимо удалить:
IBOutlet UIView *alert;
...полностью.
В сообщении об ошибке говорится, что для вашего контроллера представления не определено представление.Вам необходимо настроить это в Interface Builder.