ios - UIApplication''s-canOpenURL:-openURL: devuelve el resultado engañoso
ios6 (1)
Desde iOS6, no puedo decir si la aplicación puede iniciar Safari o no.
Si Safari está restringido en el dispositivo (Configuración> General> Restricciones), no ocurre nada cuando se intenta abrir una URL y no hay indicios de que haya fallado:
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
[[UIApplication sharedApplication] canOpenURL:url]; // Returns YES
[[UIApplication sharedApplication] openURL:url]; // Returns YES
Sin embargo, Safari no se inicia y el usuario se queda preguntándose por qué mis botones están "rotos".
Esto me parece un error, así que presenté un radar # 12449905.
¿Hay otra manera de resolver este problema?
Si este es un error de Apple, entonces lo que debes hacer es programar alrededor de él. Una vez que el usuario haga clic en el botón, siempre puede escribir algo como esto:
[self performSelector:@selector(notifyUserOfRestrictedAccess) withObject:self afterDelay:.5];
En el delegado de la aplicación, puede establecer una propiedad como:
- (void)applicationWillResignActive:(UIApplication *)application {
self.openingExternalProgram = YES;
}
En su controlador de vista, cree el método como este:
-(void) notifyUserOfRestrictedAccess {
if (!appDelegate.openingExternalProgram) {
// Message the user via UIAlertView about restricted Safari access
}
appDelegate.openingExternalProgram = NO;
}
Estoy seguro de que hay mejores maneras, pero al menos no tienes que esperar a Apple.