0

我有一个带有两个按钮的警报视图,但这些按钮不会打开网址。我不知道错误。请帮忙。

这是代码:

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

4 回答 4

5

我认为地址中的特殊字符 (ç) 正在抛出 NSURL。尝试使用stringByAddingPercentEscapesUsingEncoding:NSString 的方法对其进行编码,然后再将其传递给 NSURL 初始化程序。

于 2013-08-05T23:41:27.550 回答
1

请检查我们触发的 URL。

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

当我检查两个 URL 时,它们都无法打开。您可以使用上面的代码检查 URL 是否能够打开。

于 2013-08-06T06:45:39.517 回答
1

你必须检查网址,试试这个:

-(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.");

}
于 2013-08-06T08:00:33.457 回答
0

首先,您应该elseif在第二个条件中使用,因为如果第一个不正确,您只想触发第二个。其次,它似乎是您在@“Mapes”中使用的 URL ...我测试了这个,那个 URL 似乎是罪魁祸首。当我将该 URL 更改为另一个测试 URL 时,它起作用了。

于 2013-08-05T23:37:07.580 回答