views:

24

answers:

2

I'm running an application that requires LocationServices be enabled. I'm checking if they are by making a call to the service and catching the error. In the error case, I want to pop up an alertview notifying the user to activate location services. I have another AlertView open already when this test happens. I want to close that one and give the user the dialog box I mentioned previously.

Currently, I have

case kCLErrorDenied: // CL access has been denied (eg, user declined location use)

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"NOTICE" 
               message:@"Sorry, this application needs your location.  Please select 'Allow' when asked to use your current location.  You don't need to be on or near the trail."
                 delegate:self
              cancelButtonTitle:nil 
              otherButtonTitles:@"EXIT"];
   [alert show];
   [alert release];
   //exit(0);
   break;

This causes the app to just exit. I had an NSLog output in there so I know it gets to this case.

A: 

You need to keep track of the previous alert with an instance variable, and call the method to dismiss that previous dialog before showing the new one. You also need a delegate handler for the alert.

lucius
+1  A: 

here you are specifying delegate:self, then it searches for alert handlers declared at UIAlertViewDelegate and when it doesn't find it crashes.

So you should define

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

in your class.

Also you can implement other methods of UIAlertViewDelegate which will help you in your required task.

Sanniv
Thanks. I noticed that too. I put some handling code in there and it works great now.
Adam