2013-08-05 3 views
0

У меня есть вид предупреждения с двумя кнопками, но кнопки не открывают URL-адреса. Я не знаю ошибки. Помоги пожалуйста.UIAlertView не работает

Вот код:

-(IBAction)showAlertView { 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:@"Obrir en..." 
          message:@"Es pot requirir la aplicació de Google Maps" 
          delegate:self 
          cancelButtonTitle:@"Millor no..." 
          otherButtonTitles:@"Mapes",@"Google Maps",nil]; 
    [alert show]; 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 

    if([title isEqualToString:@"Mapes"]) 
    { 
     UIApplication *ourApplication = [UIApplication sharedApplication]; 
     NSString *ourPath = @"http://maps.apple.com/?q=Plaça+del+Rei+43003+Tarragona"; 
     NSURL *ourURL = [NSURL URLWithString:ourPath]; 
     [ourApplication openURL:ourURL]; 
    } 
    if([title isEqualToString:@"Google Maps"]) 
    { 
     UIApplication *ourApplication = [UIApplication sharedApplication]; 
     NSString *ourPath = @"comgooglemaps://?daddr=Plaça+del+Rei+43003+Tarragona&directionsmode=walking"; 
     NSURL *ourURL = [NSURL URLWithString:ourPath]; 
     [ourApplication openURL:ourURL]; 
    } 
} 
+0

Ничто не выглядит явно не так. Попробуйте помещать контрольные точки в функцию 'alertVew: clickedButtonAtIndex:', чтобы точно видеть, что происходит – bengoesboom

+0

Установите точку останова в вашем alertView: clickedButtonAtIndex: метод и трассировка. Какое название возвращается? Соответствует ли это и переходит в ваш блок (-ы)? – TomSwift

+0

make usre url не имеет места. –

ответ

5

Я думаю, что специальный символ (ç) в адресе выбросит NSURL. Попробуйте использовать метод NSString stringByAddingPercentEscapesUsingEncoding: для его кодирования перед передачей его в инициализатор NSURL.

0

Во-первых, вы должны использовать elseif в вашем втором состоянии, потому что вы только хотите, чтобы стрелять второй, если первый не верно. Во-вторых, это URL-адрес, который вы используете в @ "Mapes" ... Я тестировал это, и этот URL-адрес кажется виновником. Когда я изменил этот URL на другой тестовый URL, он сработал.

1

Проверьте URL-адрес, который мы уволили.

if([ourApplication canOpenURL:ourURL]) 
    [ourApplication openURL:ourURL]; 
else 
    NSLog(@"URL is not valid."); 

Поскольку я проверяю оба URL-адреса, они не могут быть открыты. Вы можете проверить URL-адрес с указанным выше кодом, может ли URL-адрес открываться или нет.

1

Вы должны проверить URL, попробуйте следующее:

-(IBAction)showAlertView { 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:@"Obrir en..." 
          message:@"Es pot requirir la aplicació de Google Maps" 
          delegate:self 
          cancelButtonTitle:@"Millor no..." 
          otherButtonTitles:@"Mapes",@"Google Maps",nil]; 
    [alert show]; 
} 

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

    //0 is cancel 
    if(buttonIndex == 1) 
    { 
     [self openURLWithString:@"https://www.google.com/maps/preview#!q=Pla%C3%A7a+del+Rei+43003+Tarragona&data=!1m4!1m3!1d4618!2d1.2582895!3d41.1168719!4m11!1m10!4m8!1m3!1d26081603!2d-95.677068!3d37.0625!3m2!1i1024!2i768!4f13.1!17b1"];  
    } 
    if(buttonIndex == 2) 
    { 
     [self openURLWithString:@"https://www.google.com/maps/preview#!data=!1m4!1m3!1d18473!2d1.258181!3d41.1168316!4m13!3m12!1m0!1m1!1sPla%C3%A7a+del+Rei+43003+Tarragona!3m8!1m3!1d26081603!2d-95.677068!3d37.0625!3m2!1i1024!2i768!4f13.1&fid=0"]; 

    } 
} 

- (void)openURLWithString:(NSString *)string{ 

    UIApplication *ourApplication = [UIApplication sharedApplication]; 
    NSString *ourPath = string; 
    NSURL *ourURL = [NSURL URLWithString:ourPath]; 

    if([ourApplication canOpenURL:ourURL]) 

     [ourApplication openURL:ourURL]; 
    else 
     NSLog(@"URL is not valid."); 

} 
Смежные вопросы