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你不必等着苹果。