iPhone:UIAlert对话框每次通话出现3次

时间:2010-03-15 08:30:37

标签: iphone uiviewcontroller viewdidload

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

我在我的应用的viewDidLoad中实施了一个UIAlert:

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

这是rootViewController中的viewDidLoad,用于管理视图:

- (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视图控制器中。

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

3 个答案:

答案 0 :(得分:1)

您不需要自己调用-viewDidLoad,它由NIB加载机制自动运行。这意味着您可以获得-viewDidLoad的额外调用:一个是设计,另外一个是调用它。

答案 1 :(得分:0)

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

相反,请拨打电话以唤醒viewWillDisplayviewDidDisplay中的NSAlert。每次出现视图时,都会显示警报。

我怀疑viewDidLoad被调用了三次但是为了检查它只是在方法中放置一个NSLog来查看它被调用了多少次。

当你说:

  

我实施了一个NSAlert   我的应用程序的viewDidLoad():

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

Edit01:

查看具有相同问题的帖子:UIAlertView Pops Up Three Times per Call Instead of Just Once

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

答案 2 :(得分:0)

查看警报呼叫周围的代码会很有帮助。

每当可达性发生变化时,我都会使用警报。由于重复检查可达性,因此可以重复调用警报。为了缓解这个问题,我将警报代码包装起来:

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

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