У меня возникла очень странная проблема при использовании этого UIAlertView.При просмотре врача у них есть несколько кабинетов.Выбрав один, вы получите оповещение, в котором предлагается позвонить в это место или отобразить его на карте.Чтобы создать оповещение и иметь данные наготове, когда оповещение будет отклонено, я объявил 4 строки NSS (хотя мне, вероятно, нужно только 2) в заголовочном файле.(alertTitle, alertText, alertNumber и alertAddress)
При просмотре кода проблема заключается в том, где задействован alertAddress.Также имейте в виду alertNumber.У меня было много сжатого кода, но я расширил его, чтобы помочь себе найти проблему!
-(IBAction)address1ButtonPressed:(id) sender {
Formatter *pnf = [Formatter alloc];
alertTitle = [physician objectForKey:ADDRESS1DESC_KEY];
NSString *a = [physician objectForKey:ADDRESS1A_KEY];
NSString *b =[physician objectForKey:ADDRESS1CITY_KEY];
NSString *c =[physician objectForKey:ADDRESS1STATE_KEY];
NSString *d = [physician objectForKey:ADDRESS1ZIP_KEY];
NSString *p = [physician objectForKey:PHONE1A_KEY];
alertAddress = [[NSString stringWithFormat:@"http://maps.google.com/maps?q=%@,+%@,+%@+%@",a,b,c,d] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",alertAddress);
alertText = [NSString stringWithFormat:@"%@\n%@, %@ %@\n%@",a,b,c,d,[pnf stringFromPhoneNumber:p]];
alertNumber = [p stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[pnf release];
UIAlertView *phoneAlert = [[UIAlertView alloc] initWithTitle:alertTitle message:alertText delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Call",@"View Map",nil];
[phoneAlert show];
}
Все хорошо, пока мы не достигнем точки, где мы обрабатываем предупреждение.Похоже, что alertNumber встречается очень хорошо, я могу использовать его для запуска телефонного звонка и входа в консоль.
alertAddress, однако, совсем не рад тому, что делает то же самое.даже попытка войти в консоль вызывает EXC_BAD_ACCESS.alertAddress правильно регистрирует данные до того, как оповещение будет задействовано, но доступ к этим данным вообще при обработке нажатия кнопки оповещения вызывает проблему.Я даже использовал alertNumber, это место и код функционирует отлично.
Почему обе одинаковые переменные NSString ведут себя по-разному, если используются одинаково?
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
NSLog(@"Dialing: %@",alertNumber);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",alertNumber]]];
}
if (buttonIndex == 2) {
NSLog(@"Map Selected");
NSLog(@"alertAddress contains: %@",alertAddress);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",alertAddress]]];
}
}
Вот и соответствующие объявления в заголовочном файле ...
@interface PhysicianDetailViewController: UIViewController {
...
NSString *alertTitle;
NSString *alertText;
NSString *alertNumber;
NSString *alertAddress;
...
}
@property (nonatomic, retain) NSString *alertTitle;
@property (nonatomic, retain) NSString *alertText;
@property (nonatomic, retain) NSString *alertNumber;
@property (nonatomic, retain) NSString *alertAddress;
...
А вот вывод консоли во время этого процесса, если это поможет ....
> 2010-10-29 11:09:17.954 [2672:307] http://maps.google.com/maps?q=123%20Main%20Street%0ASuite%20A,+Tampa,+FL+11111
> 2010-10-29 11:09:21.657 [2672:307] Map Selected
> Program received signal: “EXC_BAD_ACCESS”.
> kill quit