Abra el controller de vista de safari desde la vista de tabla en iOS 9 y abra Safari en iOS 8 o 7

Hola, quisiera abrir mi website desde mi celda de vista de tabla en el controller de vista de Safari si el usuario está en iOS 9 o superior. Si el usuario está en iOS 7 u 8, el website debe abrirse en la aplicación Safari estándar.

Este es el código que utilizo actualmente que abre safari.

case 3: { // Follow us section switch (indexPath.row) { case 0: { //Website NSURL *url = [NSURL URLWithString:@"http://www.scanmarksapp.com"]; if (![[UIApplication shanetworkingApplication] openURL:url]) { NSLog(@"%@%@",@"Failed to open url:",[url description]); } } break; default: break; } } break; 

Creo que este código debería abrir el controller de vista de Safari con mi website. Pero no estoy seguro de cómo combinar ambos sets de código.

 - (void)openLink:(NSString *)url { NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; if (URL) { SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; sfvc.delegate = self; [self presentViewController:sfvc animated:YES completion:nil]; } #pragma Safari View Controller Delegate - (void)safariViewControllerDidFinish:(nonnull SFSafariViewController *)controller { [controller dismissViewControllerAnimated:YES completion:nil]; } 

Entiendo que este es el código utilizado para determinar qué versión de iOS es

 if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) { 

He seguido tu consejo

 - (void)openLink:(NSString *)url { NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; if (URL) { SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; sfvc.delegate = self; [self presentViewController:sfvc animated:YES completion:nil]; } else { // will have a nice alert displaying soon. } if ([SFSafariViewController class] != nil) { // Use SFSafariViewController } else { NSURL *url = [NSURL URLWithString:@"http://www.scanmarksapp.com"]; if (![[UIApplication shanetworkingApplication] openURL:url]) { NSLog(@"%@%@",@"Failed to open url:",[url description]); } } 

Luego agregué este código debajo de mi celda de vista de tabla didSelectRowAtIndexPath

  case 3: { // Follow us section switch (indexPath.row) { case 0: { //Website NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; if (URL) { SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; sfvc.delegate = self; [self presentViewController:sfvc animated:YES completion:nil]; } else { // will have a nice alert displaying soon. } if ([SFSafariViewController class] != nil) { // Use SFSafariViewController } else { NSURL *url = [NSURL URLWithString:@"http://www.scanmarksapp.com"]; if (![[UIApplication shanetworkingApplication] openURL:url]) { NSLog(@"%@%@",@"Failed to open url:",[url description]); } } } break; default: break; } } break; 

Recibo el error "Uso de url de identificador no declarado" en esta línea de código

 NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.scanmarksapp.com", url]]; 

La eliminación de la url al final de NSStringWithFormat hace que el controller de vista Safari funcione. Sin embargo, en iOS inferior a 9.0, por ejemplo 8.4, la aplicación se bloquea.

El enfoque estándar y recomendado es verificar la capacidad, no la versión del sistema operativo. En esta instancia, puede verificar la existencia de la class SFSafariViewController.

 if ([SFSafariViewController class] != nil) { // Use SFSafariViewController } else { // Open in Mobile Safari } 

editar

Su implementación de openLink: está mal.

 - (void)openLink:(NSString *)url { NSURL *URL = [NSURL URLWithString:url]; if (URL) { if ([SFSafariViewController class] != nil) { SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL]; sfvc.delegate = self; [self presentViewController:sfvc animated:YES completion:nil]; } else { if (![[UIApplication shanetworkingApplication] openURL:url]) { NSLog(@"%@%@",@"Failed to open url:",[url description]); } } } else { // will have a nice alert displaying soon. } }