2011-03-16 37 views
4

由于某种原因,屏幕变暗并冻结,警告不显示......有人可以帮忙吗?为什么不是UIAlertView显示?

在此先感谢!

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

你检查你得到到else语句?在alertview的alloc/init之上添加NSLog以确保。 – MishieMoo 2011-03-16 21:09:19

+0

是的,我100%肯定,我已经放置了一个断点,它停在那里... – Rui 2011-03-16 21:15:59

回答

0

代表是正确的,但也许是因为你在做底释放它可能会引起问题。

与零委托尝试:-)

例如:

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

如果成功,那么它是代表,你需要声明变量作为一类变种。或者它可能在其他地方。

+0

不起作用,似乎它循环并再次调用IBAction(这个块是在一个叫做一个按钮)。使用您的代码,应用程序存在程序接收信号:“SIGKILL”。 – Rui 2011-03-16 21:20:53

+0

我的代码是正确的。正如其他人所说的,你的问题不在这里^^也许你能给我们所有的功能内容吗? – Vinzius 2011-03-16 21:23:33

+0

请在这里检查http://pastebin.com/Bf5BMEdE,谢谢你的帮助。 – Rui 2011-03-16 21:26:59

0

此警报是否可能坐在一个大循环中,并且您不在多个线程上运行?屏幕变暗,没有任何事情发生,我等同于在主线程上运行一个漫长的过程(所以UI不刷新并显示警报)。

+0

是的,正好......它似乎循环并调用IBAction再次。我只是不知道如何避免它(这是我的第一个iPhone项目)。 – Rui 2011-03-16 21:23:44

0

如果您从后台线程显示UIAlertView,您会看到没有弹出窗口的黑色屏幕或较慢的弹出窗口。只需将它放回主线程就可以了。我上周刚刚遇到这个问题。

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];