2016-10-15 1 views
5

Я использую метод openURL: options: completeHandler :, оказывается, что в iOS 10 отлично работает, но меня также интересует мое приложение, совместимое со старым IOS 9, но Xcode дает мне непризнанный селекторМетод openURL: опции: completeHandler совместимость в объекте c

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

отправить экземпляр Там какой-либо способ заставить работать в прошивкой 9 также? Благодарим за возможный ответ!

ответ

8

Новый метод UIApplication OpenUrl: варианты: completionHandler :, который выполняется асинхронно и вызывает указанный обработчик завершения на главной очереди (этот метод заменяет OpenUrl :)

Это под Дополнительная Рамочные Изменения> UIKit на: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html

вам нужно использовать его как это: -

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

Я использую OpenUrl (URL, параметры completionHandler) Вы не должны переключаться открытым способом с помощью метода OpenUrl? – Vincent

1

Новый метод прошивкой 10:

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

Читайте Doc здесь:

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

Новый метод UIApplication OpenUrl: варианты: completionHandler :, который выполняется асинхронно и вызовы указанный обработчик завершения в главной очереди (этот метод заменяет openURL :).

Для ниже прошивкой 10:

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

Вы можете использовать ниже код:

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

    } 

} 

необходимо также установить LSApplicationQueriesSchemes в PLIST, если не установлен:

Мол,

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

</array> 

Также читайте ответ здесь: https://stackoverflow.com/a/40042291/5575752

Смежные вопросы