UIApplication的-canOpenURL:-openURL:返回误导结果

自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并没有启动,用户仍然想知道为什么我的button被“破坏”。

这似乎是一个错误,所以我提起了一个雷达#12449905。

有没有另一种方法来解决这个问题?

如果这是一个苹果的错误,那么看起来你要做的就是围绕它编程。 一旦用户点击button,你总是可以写这样的东西:

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

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

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

在你的视图控制器中,像这样创build方法:

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

我相信有更好的办法,但至less你不必等着苹果。