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

有帮助吗?

解决方案

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

  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];
}

其他提示

尝试把警报在viewDidAppear。

此外,什么是对IBOutlet中?尝试采取整个事情了。

打开在界面生成的XIB文件,并控制从该文件的所有者(这应该是类BatteryAppViewController的)到视图(未警报),选择视图从弹出菜单阻力。日志表明您并未提出这个出口连接。

您不会在Interface Builder连接UIAlerts起来。警报没有定制的笔尖,所以你不能在界面生成器加载它们。您需要删除的:

IBOutlet UIView *alert;

...完全。

该错误消息说,你有没有为你的视图控制器定义的视图。您需要设置了在Interface Builder。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top