从XCode 10.0升级到11后
我收到错误消息'name'不可用:在iOS上不可用
这是在XCode 11.0和11.1上针对 Swift 4.2 进行构建的过程中,我仍然可以使用XCode 10进行构建
这是在我们通过Cocopods使用的 Objective C 外部库之一的代码中发生的。
return [(NSNumber *)[table[state] objectForKey:[rule name]] unsignedIntegerValue];
我可以通过将变量 name 重命名为 ruleName 来解决此问题,但我不想这样做。
为什么Xcode反对名称的变量名?这是Xcode,还是我可以在构建设置中解决的问题
特定的广告连播为 NUI 0.5.5
在NUIPShiftReduceGotoTable.m模块中
- (NSUInteger)gotoForState:(NSUInteger)state rule:(NUIPRule *)rule
{
return [(NSNumber *)[table[state] objectForKey:[rule name]] unsignedIntegerValue];
}
答案 0 :(得分:2)
Apple进行了更改,可能会破坏以前在Xcode 11.0 / 11.1中进行编译的代码。以前,编译器可以通过将“名称”消息传递给它不知道类型的对象来很好。在弱类型的Objective-C世界中,发生这种情况的原因可能很多。
当前可以在Xcode 11.1中完成。
id x = nil;
[x name];
这将编译,没有问题。但是:
NSObject *x = nil
[x name];
由于编译器在NSLayoutAnchor.h中(可能是)识别出最有可能的选择器是API_UNAVAILABLE选择器,因此无法编译。
如果编译器具有更多信息,则可以映射正确的选择器。这可能很简单,只要在失败的.m文件中包含具有name属性的标头即可。
我的猜测就像是在NUIPShiftReduceGotoTable.m中添加一行 #import“ NUIPRule.h”