为什么UIAlertView没有显示?

4

由于某些原因,屏幕变暗并且冻结,警报没有显示……请问有人能帮忙吗?

提前感谢!

} else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello!" 
                                                message:@"Hello!" delegate:self 
                                      cancelButtonTitle:@"Done" 
                                      otherButtonTitles:nil];
    [alert show];
    [alert release];
}

你检查过是否进入了else语句吗?在alertview的alloc/init之前添加一个NSLog以确保。 - MishieMoo
是的,我非常确定,我已经在那里设置了一个断点并且它停在那里了… - Rui
4个回答

15

你可能是在后台线程中调用了 show 方法,需要在主线程中调用它,方法如下:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello!" 
                                            message:@"Hello!" delegate:self 
                                            cancelButtonTitle:@"Done" 
                                            otherButtonTitles:nil];
[alert performSelectorOnMainThread:@selector(show)
                            withObject:nil
                            waitUntilDone:NO];
[alert release];

0

这个警告可能是因为你的程序陷入了一个大循环,而且没有在多个线程上运行。屏幕变暗并且没有任何反应,我认为这是因为在主线程上运行了一个长时间的进程(所以界面没有刷新并显示警告)。


是的,完全正确...看起来它会循环并再次调用IBAction。我只是不知道如何避免它(这是我的第一个iPhone项目)。 - Rui

0

如果您在后台线程中显示UIAlertView,则会出现没有弹出窗口或弹出窗口速度较慢的黑屏幕。将其放回主线程即可解决问题。我上周刚遇到了这个问题。


0

代理是正确的,但可能因为您在最后进行了释放,这可能会导致问题。

尝试使用nil代理:-)

例如:

UIAlertView *alertView;
alertView = [ [ UIAlertView alloc ] init ];
[ alertView setMessage:@"Hello World" ];
[ alertView show ];
[ alertView release ];

如果它能工作,那么它就是委托,你需要将变量声明为类变量。或者它可能在其他地方。

似乎不起作用,它似乎在循环并再次调用IBAction(else块位于按钮调用的操作内)。根据您的代码,应用程序将退出,并收到“SIGKILL”信号。 - Rui
我的代码是正确的。正如其他人所说,你的问题不在这里^^也许你能把你的函数内容都给我们看一下? - Vinzius
看起来问题不在这个函数里。嗯,你把什么事件关联到这个回调函数了?你可以尝试使用NSLog(@"Test");来检查函数是否被多次调用了吗?或者设置一个布尔值来验证登录是否已经在进行中。 - Vinzius
不,这个事件是好的。所以你尝试在终端打印一个日志(看看它是否出现了多次,或者没有^^)。 - Vinzius
发现问题了...我想我发布了一些不应该发布的版本 :( 感谢您的帮助和时间! - Rui
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接