0

我有一个 UIAlert,每次调用它都会弹出 3 次。在我点击它之前,它会出现然后消失。会不会是它viewDidLoad本身被调用了 3 次?

我在我的应用程序中实现了 UIAlert viewDidLoad

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:alertMessage  delegate:self cancelButtonTitle:ok otherButtonTitles:nil];

这是viewDidLoad管理视图的 rootViewController 中的:

- (void)viewDidLoad {
    Kundenkarte *kartenAnsicht = [[Kundenkarte alloc]
                                                initWithNibName:@"Kundenkarte" bundle:nil];
    kartenAnsicht.rootViewController = self;
    kartenAnsicht.viewDidLoad;
    self.map = kartenAnsicht;


    [self.view addSubview:kartenAnsicht.view];


    [kartenAnsicht release];
//  [super viewDidLoad];

}

唤起 UIAlert的viewDidLoad是在kartenAnsicht视图控制器中。

我希望有人可以帮助我,因为我没有想法。

4

3 回答 3

1

您无需调用-viewDidLoad自己,它由 NIB 加载机制自动运行。这意味着您可以获得额外的调用-viewDidLoad: one by design,以及在您调用它时的额外调用。

于 2010-03-15T08:37:30.973 回答
0

首先,你不应该在viewDidLoad. 该方法适用于首次从 nib 读取视图后的幕后配置。无法确定每次视图显示时都会调用它,因为在第一次加载后,视图可能保存在内存中,而不是从 nib 重新加载。

相反,将调用 NSAlert 的调用放在viewWillDisplayor中viewDidDisplay。这将在每次视图出现时显示警报。

我怀疑它viewDidLoad被调用了 3 次,但要检查它,只需在方法中放置一个 NSLog 以查看它被调用了多少次。

当你这么说时:

我在我的应用程序的 viewDidLoad() 中实现了 NSAlert:

... 这意味着什么?究竟什么对象有这个方法?如果是应用程序委托,这将不起作用,因为应用程序委托协议不响应viewDidLoad. 它必须在 UIViewController 中。

编辑01:

看到这个有同样问题的帖子:UIAlertView Pops Up 3 Times per Call 而不是只有一次

简短的回答:您通过释放警报来终止警报。要么将其保留为视图控制器的属性,要么更好的是,使用runModal而不是显示警报show并捕获立即返回的按钮编号。

于 2010-03-15T12:47:21.757 回答
0

查看警报调用周围的代码会很有帮助。

每当可达性发生变化时,我都会使用警报。由于反复检查可达性,因此可能会反复调用警报。为了缓解这种情况,我像这样包装警报代码:

if (!myAlert) { /* set up and show myAlert */ }

但是,这样做的一个问题是,当您单击“取消”按钮时,警报将保持非零,因此由于该条件而永远不会再次显示。如果有人可以通过修复添加到此响应中,那就太好了。我假设我可以为取消按钮添加一个处理程序,该处理程序将破坏 myAlert。

于 2010-07-02T19:03:41.620 回答