2016-10-15 3 views
5

Ich benutze die Methode openURL: Optionen: completionHandler :, stellt sich heraus, dass in iOS 10 funktioniert gut, aber ich bin auch daran interessiert, meine App ist kompatibel mit dem alten iOS 9, aber Xcode gibt mir einMethode openURL: Optionen: completionHandler Kompatibilität in Ziel c

NSException: 
-[UIApplication openURL:options:completionHandler:]: 

Unerkannte Selektor Instanz senden es eine Möglichkeit, es in iOS 9 auch funktioniert? Danke für die mögliche Antwort!

Antwort

8

Die neue UIApplication Methode openURL: Optionen: completionHandler :, die asynchron ausgeführt wird, und ruft den angegebenen Abschluss Handler auf der Hauptwarteschlange (diese Methode ersetzt openURL :)

Dies unter dem weiteren ist Rahmen Änderungen> UIKit an: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html

müssen Sie es wie folgt verwenden: -

if #available(iOS 10.0, *) { 
    UIApplication.shared.open(url, options: [:], completionHandler: nil) 
} else { 
    UIApplication.shared.openURL(url) 
} 
+0

Ich verwende Openurl (url, Optionen, completionHandler) Sollten Sie nicht offene Methode mit der openURL Methode wechseln? – Vincent

1

Neue Methode in iOS 10:

- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options 
    completionHandler:(void (^ __nullable)(BOOL success))completion 

lesen Doc hier:

https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html

Die neue UIApplication Methode openURL: Optionen: completionHandler :, die asynchron und Anrufe ausgeführt wird der angegebene Beendigungshandler in der Hauptwarteschlange (diese Methode ersetzt openURL :).

Für unter iOS 10:

[[UIApplication sharedApplication] openURL:URL];//URL is NSURL 

Sie unter Code verwenden können:

UIApplication *application = [UIApplication sharedApplication]; 

NSURL *URL = [NSURL URLWithString:strUrl]; 

if([[UIDevice currentDevice].systemVersion floatValue] >= 10.0){ 

    if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) { 
    [application openURL:URL options:@{} 
     completionHandler:^(BOOL success) { 
     NSLog(@"Open %@: %d",scheme,success); 
    }]; 
    } else { 
    BOOL success = [application openURL:URL]; 
    NSLog(@"Open %@: %d",scheme,success); 
    } 


} 
else{ 

    bool can = [application canOpenURL:URL]; 

    if(can){ 

    [application openURL:URL]; 

    } 

} 

müssen auch LSApplicationQueriesSchemes in plist setzen, wenn nicht gesetzt:

Wie,

<key>LSApplicationQueriesSchemes</key> 
<array> 
<string>urlscheme1</string> 
<string>urlscheme2</string> 

</array> 

Lesen Sie auch hier beantworten: https://stackoverflow.com/a/40042291/5575752

Verwandte Themen