iPhone:UIAlert对话似乎3倍的每一个电话
-
20-09-2019 - |
题
我有一个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];
}
的 viewDidLoad
这唤起了UIAlert是在 kartenAnsicht
图控制器。
我希望有人可以帮助我,因为我的想法。
解决方案
首先,你永远不应把任何类型的显示器中的 viewDidLoad
.该方法旨在对的场景背后的结构之后的观点是第一读笔尖。有没有把握,就会被称为每一次视显示器,因为之后第一次载荷,视可能举行的记忆并不重装上阵从笔尖。
相反,把该呼吁唤起NSAlert在 viewWillDisplay
或 viewDidDisplay
.这将显示该警告每次查看的出现。
我怀疑 viewDidLoad
是所谓的三次,但检查,只是把一个只在法看到它是多少次叫。
当你说:
我实现了一个NSAlert在 viewDidLoad()我的应用程序:
...这是什么意思?什么样的对象究竟有方法吗?如果它是应用程序的代表,这将不会的工作,因为该应用程序委托协议没有回应 viewDidLoad
.它必须在一个UIViewController.
Edit01:
看看这篇文章了同样的问题: UIAlertView弹了三次每次通话,而不是只有一次
简短的回答:你杀了的警报通过释放。要么保留它作为一个酒店的图控制或更好的是,显示该警报 runModal
而不是的 show
和捕获的按钮数量返回。
其他提示
您不需要调用-viewDidLoad
自己,它是由NIB加载机制自动运行。这意味着你得到-viewDidLoad
的额外调用:一个由设计,和演员,只要你把它叫做
这将是有益的,看看周围的警报调用的代码。
我使用警报每当可达性的变化。由于可达性,反复确认,警报可以得到多次呼吁。为了减轻这一点,我包裹像这样的警报代码:
if (!myAlert) { /* set up and show myAlert */ }
然而,一个问题是,当你点击取消按钮,警报将保持不为零,因此也不会再显示的,因为条件。如果有人可能会增加与该修复这种反应,这将是巨大的。我假设我可以添加处理程序取消按钮,它会摧毁myAlert。