所以这就是问题所在。我准备很快为 iOS 发布一个更新,它将解决 iOS 7 中的一些问题。为此,我需要使用一些特定的 iOS 7 功能/类型。我已经完全确定 iOS 7 代码只会在 iOS 7 上执行并回退到 iOS 7 之前的不同代码。当然,我不允许使用当前的 Xcode beta 提交,所以我正在尝试编译与当前的 Xcode 版本。但是,我似乎找不到禁用此特定警告的方法:
Use of undeclared identifier '<Redacted>'.
有谁知道使用#pragma
. 我尝试了很多不同的方法,包括
-w
, -Weverthing
,-Wall
但似乎没有任何效果。
更新
答案:当然,您不能,因为编译器无法编译它一无所知的标识符。我的解决方案是简单地创建一个#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 会为你自动完成它,这比使用 full 容易得多#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
就不再需要了。