添加AlertView在viewWillAppear,iPhone

时间:2009-11-30 23:48:50

标签: iphone objective-c crash alert terminate

我试图在视图出现后立即显示警报视图(不使用按钮)。在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中的新视图,仍然没有运气

4 个答案:

答案 0 :(得分:2)

问题在于两个核心动画(用于查看当前视图的动画和用于显示警报的动画)重叠。您需要按照以下解决方法分离这两个动画移动:

  1. 将提醒代码放在viewDidAppear,而不是viewWillAppear

  2. 致电[alert performSelector:@selector(show) withObject:nil afterDelay:0.0]。这可确保在完成当前动画后发生警报。

  3. 您可能还需要小心释放alert。如果我是你,我将有一个单独的方法(例如showHelloAlert),然后从viewDidAppear调用它:

    - (void)viewDidAppear: (BOOL)animated {
      [self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
      [super viewDidAppear:animated];
    }
    

答案 1 :(得分:0)

尝试将警报放在viewDidAppear中。

另外,iboutlet是为了什么?试着把整个事情搞清楚。

答案 2 :(得分:0)

在Interface Builder中打开xib文件,并控制从文件所有者(应该是类BatteryAppViewController)拖动到您的视图(而不是警报),然后从弹出的菜单中选择视图。日志表明您没有建立此插座连接。

答案 3 :(得分:0)

您没有在Interface Builder中连接UIAlerts。警报没有可自定义的nib,因此您无法在界面构建器中加载它们。您需要删除:

IBOutlet UIView *alert;

...完全。

错误消息表明您没有为视图控制器定义视图。您需要在Interface Builder中进行设置。