我有一个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
视图控制器中。
我希望有人可以帮助我,因为我没有想法。
答案 0 :(得分:1)
您不需要自己调用-viewDidLoad
,它由NIB加载机制自动运行。这意味着您可以获得-viewDidLoad
的额外调用:一个是设计,另外一个是调用它。
答案 1 :(得分:0)
首先,你不应该在viewDidLoad
中放置任何类型的显示。该方法适用于首次从nib读取视图后的幕后配置。不确定每次显示视图时都会调用它,因为在第一次加载后,视图可能会保留在内存中而不会从nib重新加载。
相反,请拨打电话以唤醒viewWillDisplay
或viewDidDisplay
中的NSAlert。每次出现视图时,都会显示警报。
我怀疑viewDidLoad
被调用了三次但是为了检查它只是在方法中放置一个NSLog来查看它被调用了多少次。
当你说:
我实施了一个NSAlert 我的应用程序的viewDidLoad():
......这是什么意思?这个方法到底有什么对象?如果它是应用程序委托,则这将不起作用,因为应用程序委托协议不响应viewDidLoad
。它必须在UIViewController中。
查看具有相同问题的帖子:UIAlertView Pops Up Three Times per Call Instead of Just Once
简短回答:您通过释放它来终止警报。将其保留为视图控制器的属性或更好,但使用runModal
而不是show
显示警报并捕获立即返回的按钮编号。
答案 2 :(得分:0)
查看警报呼叫周围的代码会很有帮助。
每当可达性发生变化时,我都会使用警报。由于重复检查可达性,因此可以重复调用警报。为了缓解这个问题,我将警报代码包装起来:
if (!myAlert) { /* set up and show myAlert */ }
但是,这样做的一个问题是,当您单击“取消”按钮时,警报将保持非零,因此由于该条件而无法再显示。如果有人可以通过修复添加到此响应,那将是很好的。我假设我可以为取消按钮添加一个处理器,它将破坏myAlert。