我正在将部署目标从iOS 8更改为iOS 10,并且显示错误,例如正在初始化'BOOL'(又名'signed char'),其表达式为'void'类型不兼容这条线
- (BOOL)presentAuthorizationWithURL:(NSURL *)URL session:(id<OIDAuthorizationFlowSession>)session {
if (_authorizationFlowInProgress) {
return NO;
}
_authorizationFlowInProgress = YES;
_session = session;
if (@available(iOS 9.0, *)) {
if ([SFSafariViewController class]) {
SFSafariViewController *safariVC =
[[[self class] safariViewControllerFactory] safariViewControllerWithURL:URL];
safariVC.delegate = self;
_safariVC = safariVC;
[_presentingViewController presentViewController:safariVC animated:YES completion:nil];
return YES;
}
} else {
// Fallback on earlier versions
}
BOOL openedSafari = [[UIApplication sharedApplication] openURL:URL];
if (!openedSafari) {
[self cleanUp];
NSError *safariError = [OIDErrorUtilities errorWithCode:OIDErrorCodeSafariOpenError
underlyingError:nil
description:@"Unable to open Safari."];
[session failAuthorizationFlowWithError:safariError];
}
return openedSafari;
}
这是以前的方法,我可以将整个方法改为void吗?
究竟是什么错误,如何解决此错误?
提前致谢
答案 0 :(得分:1)
您正在呼叫的方法具有以下签名:
- (void) openURL:(NSURL *)url
options:(NSDictionary<NSString *,id> *)options
completionHandler:(void (^)(BOOL success))completion;
它返回void
,因此您无法将其分配给BOOL
变量。相反,您需要一个completionHandler
块来确定方法完成时要执行的操作。
在iOS 10之前,这是要调用的方法:
- (BOOL)openURL:(NSURL *)url;
该方法确实返回BOOL
,但现在已弃用。
您需要将代码更改为以下内容:
[[UIApplication sharedApplication] openURL:URL options:@{}
completionHandler:^(BOOL success) {
if (success) {
// do whatever you do on success
}
else {
// do whatever you do on failure
}
}];
有关如何处理此更改的详细信息,请参阅https://useyourloaf.com/blog/openurl-deprecated-in-ios10/。
答案 1 :(得分:0)
方法
- (void)openURL:(NSURL *)url
options:(NSDictionary<NSString *,id> *)options
completionHandler:(void (^)(BOOL success))completion;
不返回值,它返回void
,这不算什么。