Why isn't UIAlertView Showing?

2019-02-14 16:08发布

For some reason screen gets dark and freezes, alert is not shown... can someone please help?

Thanks in advance!

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

4条回答
孤傲高冷的网名
2楼-- · 2019-02-14 16:36

Is this alert maybe sitting in a big loop and you are not running on multiple threads? The screen darkening and nothing happening is something I equate with running a long process on the main thread (so the UI doesn't refresh and show the alert).

查看更多
【Aperson】
3楼-- · 2019-02-14 16:39

You get a dark screen without a popup, or slower popup if you show the UIAlertView from a background thread. Just out it back in the main thread and it will be fine. I just had this problem last week.

查看更多
仙女界的扛把子
4楼-- · 2019-02-14 16:44

Delegate is correct, but maybe because your do a release at the end it may cause a problem.

Try with a nil delegate :-)

For example :

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

If it works, then it was the delegate and you need to declare the variable as a class var. Or it maybe be elsewhere.

查看更多
太酷不给撩
5楼-- · 2019-02-14 16:52

You are probably calling show from a background thread, call it on the main thread like this:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello!" 
                                            message:@"Hello!" delegate:self 
                                            cancelButtonTitle:@"Done" 
                                            otherButtonTitles:nil];
[alert performSelectorOnMainThread:@selector(show)
                            withObject:nil
                            waitUntilDone:NO];
[alert release];
查看更多
登录 后发表回答