16

从 iOS6 开始,我无法判断应用程序是否可以启动 Safari。

如果设备上的 Safari 受到限制(设置>常规>限制),则在尝试打开 URL 时不会发生任何事情,并且没有迹象表明出了什么问题:

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
[[UIApplication sharedApplication] canOpenURL:url]; // Returns YES
[[UIApplication sharedApplication] openURL:url]; // Returns YES

但是,Safari没有启动,用户想知道为什么我的按钮“坏了”。

这对我来说似乎是一个错误,所以我提交了一个雷达#12449905。

有没有其他方法可以解决这个问题?

4

1 回答 1

2

如果这是一个 Apple 错误,那么看起来你要做的就是围绕它进行编程。用户单击按钮后,您始终可以编写如下内容:

[self performSelector:@selector(notifyUserOfRestrictedAccess) withObject:self afterDelay:.5];

在应用程序委托中,您可以设置一个属性,例如:

- (void)applicationWillResignActive:(UIApplication *)application {
    self.openingExternalProgram = YES;
}

在您的视图控制器中,创建如下方法:

-(void) notifyUserOfRestrictedAccess {

    if (!appDelegate.openingExternalProgram) {
        // Message the user via UIAlertView about restricted Safari access
    }
    appDelegate.openingExternalProgram = NO;
}

I'm sure there are better ways, but at least you don't have to wait on Apple.

于 2012-10-26T14:21:40.913 回答