初始化';布尔';(又名';有符号字符';)具有不兼容类型的表达式';无效';在iOS中?

初始化';布尔';(又名';有符号字符';)具有不兼容类型的表达式';无效';在iOS中?,ios,objective-c,Ios,Objective C,我正在将部署目标从iOS 8更改为iOS 10,它显示了一个错误,如初始化'BOOL'(也称为'signed char'),在该行中有一个不兼容类型为'void'的表达式。 - (BOOL)presentAuthorizationWithURL:(NSURL *)URL session:(id<OIDAuthorizationFlowSession>)session { if (_authorizationFlowInProgress) { return NO; } _authori

我正在将部署目标从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;
}
-(BOOL)presentAuthorizationWithURL:(NSURL*)URL会话:(id)会话{
如果(授权流程){
返回否;
}
_authorizationFlowInProgress=是;
_会话=会话;
如果(@可用(iOS 9.0,*)){
if([SFSafariViewController类]){
SFSafariViewController*safariVC=
[[[self class]safariViewControllerFactory]safariViewControllerWithURL:URL];
safariVC.delegate=self;
_safariVC=safariVC;
[_presentingviewcontrollerpresentviewcontroller:safariVC动画:是完成:无];
返回YES;
}
}否则{
//对早期版本的回退
}
BOOL openedSafari=[[UIApplication-sharedApplication]openURL:URL];
如果(!openedSafari){
[自我清理];
NSError*safariError=[OIDErrorUtilities errorWithCode:OIDErrorCodeSafariOpenError
参考误差:零
描述:@“无法打开Safari”。];
[会话失败授权错误:safariError];
}
返回openedSafari;
}
这是前面的方法,我可以将整个方法更改为void吗

错误到底是什么?如何解决此错误


提前感谢

您正在调用的方法具有以下签名:

- (void)  openURL:(NSURL *)url
          options:(NSDictionary<NSString *,id> *)options
completionHandler:(void (^)(BOOL success))completion;
该方法确实返回了一个
BOOL
,但现在已被弃用

您需要将代码更改为以下内容:

[[UIApplication sharedApplication] openURL:URL options:@{}
   completionHandler:^(BOOL success) {
  if (success) {
    // do whatever you do on success
  }
  else {
    // do whatever you do on failure
  }
}];
有关如何处理此更改的更多详细信息,请参阅

方法

- (void)openURL:(NSURL *)url 
        options:(NSDictionary<NSString *,id> *)options 
completionHandler:(void (^)(BOOL success))completion;
-(void)openURL:(NSURL*)url
选项:(NSDictionary*)选项
completionHandler:(void(^)(BOOL success))完成;

不返回值,它返回的是
void
,它什么都不是。

-openURL:options:completionHandler:根本不返回
BOOL
值-你从哪里知道的?之前我是这样初始化BOOL openedSafari=[[UIApplication-sharedApplication]openURL:URL];我将部署目标从iOS 8更改为10.,openURL在iOS 10中不受欢迎,然后我再次像这样初始化BOOL openedSafari=[[UIApplication sharedApplication]openURL:URL选项:@{}completionHandler:nil];使用
completionHandler:
然后,这可以为您完成之前的工作,我正在像这样初始化BOOL openedSafari=[[UIApplication-sharedApplication]openURL:URL];我正在将部署目标从iOS 8更改为iOS 10。openURL在iOS 10中被弃用的方式有所不同,然后我再次更改了上面的初始化方式..好的,@Kristopher Johnson。我也可以更改方法,对吗?但我使用的是这个方法-(BOOL)presentAuthorizationWithURL:(NSURL*)URL会话,它应该返回一些值,对吗?
- (void)openURL:(NSURL *)url 
        options:(NSDictionary<NSString *,id> *)options 
completionHandler:(void (^)(BOOL success))completion;