iOS 6指针的局部声明(例如NSLayoutConstraint)



我有一个同时支持iOS 5和iOS 6的应用程序。在一个类中,我需要在本地声明一些NSLayoutConstraint指针,这只适用于iOS 6。我只在ios6布局中使用它们,因为在ios5中,我会自动调整布局大小。这个类用于iOS 5和iOS 6。

有没有办法在类的头文件中声明一些NSLayoutConstraint指针,这样我就不会在ios5下得到异常?

我已经尝试以下,但我得到一个编译器错误在我的实现文件,这个约束是未声明的:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0
NSLayoutConstraint *exampleConstraint;
#endif

非常感谢您的建议

Linard

#if是编译时预处理器指令,在编译后对不起作用。你的代码片段所做的就是只包含__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0为真时的定义-所以当你将最小值设置为iOS 5时,该声明将永远不会被包含。

然而,你的问题的解决方案很简单-什么都不做,至少对这个声明。iOS/OS X使用弱链接,所以你可以针对只在iOS 6中可用的框架/类型编译代码,并且代码将在iOS 5 下加载并成功执行,前提是测试已加载的类型。您可以通过调用该类型的class方法来测试该类型是否已加载,如果该类型未加载,则返回nil

所以在你的代码中,你首先把#if放在你的声明周围,然后,使用NSLayoutConstraint的代码必须包含在一个条件中,只有当类型存在时才执行。比如:

NSLayoutConstraint *exampleConstraint;
...
BOOL haveNSLayoutConstraint = [NSLayoutConstraint class] != nil;
...
if( haveNSLayoutConstraint )
{
   ... exampleConstraint ...
}

相关内容

最新更新