views:

63

answers:

2

Hello,

I need make UIAlertView blocking. Because i have function and i need to return UIAlertView choice. But problem is that after UIAlertView is shown my function code is executing further so i can't catch UIAlertView choice (i can do it in delegate methods, but i need to return function result).

I tried to make UIAlertVIew blocking with NSCondition. But the code don't works.

condition = [NSCondition new];
result = 0 ; 
[condition lock];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Fingerprint" message:@"test" delegate:window_self cancelButtonTitle:@"No" otherButtonTitles:@"Yes",nil];
[alert setDelegate:self];
[alert show];
while (result == 0) [condition wait];
[condition unlock] ;

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
 [condition lock] ;
 if (buttonIndex == 0)
 {
  result = 2; 
 }
 else if (buttonIndex == 1)
 {
  result = 3 ;
 }
 [condition signal] ;
 [condition unlock] ;
}

Maybe how to fix this code or any other suggestions ? Thanks

A: 

UIAlertViews aren't modal and don't stop the execution of your code.

To do what you describe, you will need to use the delegate methods. If you need to return the value of the users choice, you will need to pass the value back through the delegate method.

TomH
TomH but i need that function would return value. UAlertView delegate methods runs on other thread. Any Solutions ?
kesrut
Do you need to return the value of the function or the button index of the uialertview?
TomH
A: 

There's no way to achieve what you want. Only through the delegate. You should redesign your function or refuse using UIAlertView

Kostiantyn Sokolinskyi
Thanks. I redesigned my function logic.
kesrut