Добавление AlertView в viewWillAppear, iPhone - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь показать представление оповещения, как только оно появится (без использования кнопки). В 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, все еще не повезло

Ответы [ 4 ]

2 голосов
/ 01 декабря 2009

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

  1. Код предупреждения должен быть в viewDidAppear, а не viewWillAppear

  2. Звоните [alert performSelector:@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];
}
0 голосов
/ 01 декабря 2009

Вы не подключаете UIAlerts в Интерфейсном Разработчике. Оповещения не имеют настраиваемых перьев, поэтому их нельзя загрузить в конструкторе интерфейсов. Вам необходимо удалить:

IBOutlet UIView *alert;

... полностью.

В сообщении об ошибке говорится, что у вас нет определенного представления для вашего контроллера представления. Вы должны установить это в Интерфейсном Разработчике.

0 голосов
/ 01 декабря 2009

Откройте файл xib в Интерфейсном Разработчике и управляйте перетаскиванием из владельца файла (который должен быть класса BatteryAppViewController) в ваш вид (не в предупреждение) и выберите вид из всплывающего меню. В журнале указывается, что вы не установили это выходное соединение.

0 голосов
/ 01 декабря 2009

Попробуйте поместить предупреждение в viewDidAppear.

Кроме того, для чего нужен iboutlet? Попробуйте вытащить все это.

...