Вопрос

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top