2015-11-25 19 views
5

Hallo Ich möchte meine Website von meiner Tabellenansichtszelle im Safari-View-Controller öffnen, wenn der Benutzer auf iOS 9 oder höher ist. Wenn der Benutzer auf iOS 7 oder 8 ist, sollte die Website in der Standard-Safari-App geöffnet werden.Safari-Ansicht-Controller aus der Tabellenansicht auf iOS 9 öffnen und in Safari auf iOS 8 oder 7 öffnen

Dies ist der Code, den ich derzeit verwende, der Safari öffnet.

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

      default: 
       break; 
     } 

    } 
     break; 

Ich glaube, dass dieser Code den Safari View Controller mit meiner Website öffnen sollte. Aber ich bin mir nicht sicher, wie ich beide Code-Sets kombiniere.

- (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]; 
} 

Ich verstehe, das ist der Code verwendet, was iOS-Version zu bestimmen, ist es

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

Ich habe Ihren Rat

- (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 sharedApplication] openURL:url]) { 
     NSLog(@"%@%@",@"Failed to open url:",[url description]); 
    } 
} 

Dann folgte diesen Code unter meinem Tisch Sichtzelle DidSelectRowAtIndexPath hinzugefügt

 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 sharedApplication] openURL:url]) { 
         NSLog(@"%@%@",@"Failed to open url:",[url description]); 
        } 

       } 
      } 
       break; 

      default: 
       break; 
     } 

    } 
     break; 

ich die Fehlermeldung „Die Verwendung von nicht deklarierter Bezeichner url“ auf dieser Zeile Code bekommen

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

URL am Ende des NSStringWithFormat Entfernen macht die Steuerung der Arbeit Safari Ansicht. Jedoch unter iOS unter 9,0 z.B. 8.4 Die App stürzt ab.

Antwort

18

Der Standard und empfohlene Ansatz besteht darin, auf die Fähigkeit zu prüfen, nicht auf die Betriebssystemversion. In diesem Fall können Sie nach der Existenz der SFSafariViewController-Klasse suchen.

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

bearbeiten

Ihre Implementierung von openLink: ist falsch.

- (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 sharedApplication] openURL:url]) { 
       NSLog(@"%@%@",@"Failed to open url:",[url description]); 
      } 
     } 
    } else { 
     // will have a nice alert displaying soon. 
    } 
} 
+0

Ich habe die Frage aktualisiert, die zeigt, was ich getan habe und den Fehler, den es zeigt. – user5394344

+0

Sie verwenden Ihre Methode nicht zur sicheren Verwendung von 'SFSafariViewController'. Nicht nur das, Ihre 'openLink:' Methode ist falsch. Sie versuchen, 'SFSafariViewController' zu verwenden, ohne zu prüfen, ob die Klasse verfügbar ist. – Avi

+0

@Avi Wenn Sie eine App für iOS 9 und höher erstellen, müssen Sie nicht auf die Verfügbarkeit von Api prüfen? – Supertecnoboff

Verwandte Themen