iOS 9的代码块错误

时间:2015-09-22 11:54:06

标签: ios objective-c ios9

iOS 9发布后(Xcode 7.0),应用程序商店中的应用程序间歇性崩溃,当我们尝试使用iOS 9编译代码库时,我们在这段代码中看到编译器错误

/* Check for dependent errors */
    __block NSError *dependentError = nil;
    [self.dependencies enumerateObjectsUsingBlock:^(CustomBaseOperationLoader *operation, NSUInteger idx, BOOL *stop) {
        if (operation.operationError != nil) {
            dependentError = [operation.operationError copy];
            *stop = YES;
        }
    }];
  

不兼容的块指针类型发送'void   (^)(CustomBaseOperationLoader * __ strong,NSUInteger,BOOL *)'到   'void(^ _Nonnull)类型的参数(NSOperation * _Nonnull __strong,   NSUInteger,BOOL * _Nonnull)'

iOS noob,其他任何人遇到此问题或知道如何解决此问题? 我们在iOS 9更新之前没有看到它,因此不推荐使用某个地方。

CustomBaseOperationLoader使用一些自定义属性扩展NSOperation

更新: 根据以下答案,我将方法调用更改为

__block NSError *dependentError = nil;
    [self.dependencies enumerateObjectsUsingBlock:^ _Nonnull(CustomBaseLoaderOperation * _Nonnull operation, NSUInteger  idx, BOOL * _Nonnull stop) {
        if (operation.operationError != nil) {
            dependentError = [operation.operationError copy];
            *stop = YES;
        }
    }];

现在我明白了:

  

控制到达非空块的结尾

更新2: 添加了一个返回块,这似乎解决了错误 这是处理这个问题的正确方法吗?

/* Check for depended errors */
    __block NSError *dependentError = nil;
    [self.dependencies enumerateObjectsUsingBlock:^ _Nonnull(CustomBaseLoaderOperation * _Nonnull operation, NSUInteger  idx, BOOL * _Nonnull stop) {
        if (operation.operationError != nil) {
            dependentError = [operation.operationError copy];
            *stop = YES;
        }
        return;
    }];

更新 现在xcode刚刚爆发了

这一变化带来的错误
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal (use -v to see invocation)

不知道该怎么做

1 个答案:

答案 0 :(得分:2)

添加可空性注释。

 [yourArray enumerateObjectsUsingBlock:^_Nonnull(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        //your stuff
    }];