0

我试图在视图出现后立即显示警报视图(不使用按钮)。在 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

4 回答 4

2

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

  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];
}
于 2009-12-01T00:06:53.177 回答
0

尝试将警报放入 viewDidAppear。

另外,iboutlet 是干什么用的?试着把整个东西拿出来。

于 2009-11-30T23:54:56.930 回答
0

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

于 2009-12-01T00:07:36.870 回答
0

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

IBOutlet UIView *alert;

...完全地。

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

于 2009-12-01T00:08:55.577 回答