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)
不知道该怎么做
答案 0 :(得分:2)
添加可空性注释。
[yourArray enumerateObjectsUsingBlock:^_Nonnull(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//your stuff
}];