Rui
Rui

Reputation: 516

Why isn't UIAlertView Showing?

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

Upvotes: 4

Views: 3862

Answers (4)

Lachlan Roche
Lachlan Roche

Reputation: 25946

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

Upvotes: 15

honcheng
honcheng

Reputation: 2044

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.

Upvotes: 0

Walter
Walter

Reputation: 5887

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).

Upvotes: 0

Vinzius
Vinzius

Reputation: 2901

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.

Upvotes: 0

Related Questions