所以问题来了。我准备尽快为iOS发布更新,以解决iOS 7中的一些问题。为此,我需要使用一些特定的iOS 7功能/类型。我已经绝对确信,iOS 7代码只能在iOS 7上执行,并且会在iOS 7之前回退到不同的代码。当然,我不允许使用当前的Xcode测试版进行提交,因此我试图编译与当前的Xcode版本。不过,我似乎无法找到一个方法来禁用此特定的警告:编译器的条件隐藏代码
Use of undeclared identifier '<Redacted>'.
有谁知道的方式使用#pragma
禁用此警告。我已经尝试了很多不同的人,包括
-w
,-Weverthing
,-Wall
,但似乎没有任何工作。
UPDATE 回答:你当然不能,因为编译器不能编译一个它一无所知的标识符。我的解决方案是简单地创建一个#define
:
#define <redacted> 1
更新2 下面实际上使人们更容易的答案。我已经创建了#define Xcode5Code(code, alt)
,它允许我有条件地执行代码块。通过使用由@maddy解决方案修改它:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
#define Xcode5Code(code, alt) code
#else
#define Xcode5Code(code, alt) alt
#endif
这让我很容易地通过使用隐藏的来自编译器的代码块:
Xcode5Code({
//Code to be execute only with Xcode 5
}, {
//code to be executed in previous versions of Xcode
})
使用#define Xcode5Code
的主要好处是,Xcode中会自动为您完成,这比使用完整的#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
更容易,Xcode不会自动完成。
这实际上并不能区分iOS 7和iOS 7之前的设备。它只区分当前Xcode可以处理的iOS版本。区分我使用的iOS设备版本:
NSUInteger DeviceSystemMajorVersion(void) {
static NSUInteger _deviceSystemMajorVersion = -1;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_deviceSystemMajorVersion = [[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] intValue];
});
return _deviceSystemMajorVersion;
}
上面是Apple的代码,顺便说一下。为了在NDA上跳舞,我会说这有助于展示根控制器的视图,因为这取决于您使用的Xcode版本和设备上的iOS版本。如果你试图管理测试版和生产代码,这可以帮助很多。一旦您可以使用Xcode 5提交应用程序,则不再需要#define Xcode5Code
。
这不是一个警告,这是一个错误。你希望编译器如何操作一个它不知道的标识符? – Mat
这是一个警告吗?看起来更像是一个错误。 – trojanfoe
@Mat啊......当然是啊。显然我今天需要更多咖啡。是的,这是一个错误,当然我不能指望编译器编译一些它一无所知的东西。 –