方法openURL:options:目标c中的completionHandler兼容性

pac*_*ero 5 iphone objective-c ios

我正在使用方法openURL:options:completionHandler:,事实证明在iOS 10中工作正常,但我也对我的应用程序感兴趣与旧的iOS 9兼容,但xcode给了我一个

NSException:
-[UIApplication openURL:options:completionHandler:]:
Run Code Online (Sandbox Code Playgroud)

无法识别的选择器发送到实例有什么办法让它在iOS 9中也可以工作吗?感谢可能的回复!

Ann*_*pta 13

新的UIApplication方法openURL:options: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)
}
Run Code Online (Sandbox Code Playgroud)


Ron*_*ara 5

iOS 10 中的新方法:

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

在这里阅读文档:

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

新的 UIApplication 方法 openURL:options:completionHandler:,异步执行并调用主队列上指定的完成处理程序(此方法替换 openURL:)。

对于 iOS 10 以下:

[[UIApplication sharedApplication] openURL:URL];//URL is NSURL
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码:

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

  }

}
Run Code Online (Sandbox Code Playgroud)

LSApplicationQueriesSchemes如果未设置,还需要在 plist 中设置:

喜欢,

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

</array> 
Run Code Online (Sandbox Code Playgroud)

也在这里阅读答案:https : //stackoverflow.com/a/40042291/5575752