Rya*_*ner 2 objective-c ios xcode11
从 XCode 10.0 升级到 11 后
我收到错误“名称”不可用:在 iOS 上不可用
这是在XCode 11.0 和 11.1 上的Build for Swift 4.2期间,我仍然可以使用 XCode 10 进行构建
这发生在我们一直通过 Cocopods 使用的Objective C外部库之一的代码中。
return [(NSNumber *)[table[state] objectForKey:[rule name]] unsignedIntegerValue];
Run Code Online (Sandbox Code Playgroud)
我可以通过将变量名称重命名为ruleName来解决这个问题,但我宁愿不这样做。
为什么 Xcode 反对 name 的变量名?这是一个Xcode,还是我可以在构建设置中修复的东西
具体的pod是NUI 0.5.5
在模块 NUIPShiftReduceGotoTable.m 中
- (NSUInteger)gotoForState:(NSUInteger)state rule:(NUIPRule *)rule
{
return [(NSNumber *)[table[state] objectForKey:[rule name]] unsignedIntegerValue];
}
Run Code Online (Sandbox Code Playgroud)
Apple 进行了一项更改,可以破坏之前在 Xcode 11.0/11.1 中编译的代码。以前,编译器可以将“名称”消息传递给它不知道其类型的对象。在弱类型的 Objective-C 世界中,发生这种情况的原因有很多。
目前在 Xcode 11.1 中你可以做到。
id x = nil;
[x name];
Run Code Online (Sandbox Code Playgroud)
这将编译,没问题。但:
NSObject *x = nil
[x name];
Run Code Online (Sandbox Code Playgroud)
由于编译器识别出最有可能的选择器是 NSLayoutAnchor.h 中的 API_UNAVAILABLE 一个(也许),因此不会编译。
如果编译器有更多信息,它可以映射正确的选择器。这可能就像在失败的 .m 文件中包含任何具有 name 属性的标题一样简单。
我的猜测是在 NUIPShiftReduceGotoTable.m 中添加一行 #import"NUIPRule.h"
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |