我有一个同时支持iOS 5和iOS 6的应用程序。在一个类中,我需要在本地声明一些NSLayoutConstraint指针,这些指针只有iOS 6。我只将它们用于iOS 6布局,因为对于iOS 5,我会自动调整布局的大小。此类可用于iOS 5和iOS 6。
有没有办法在类的头文件中声明一些NSLayoutConstraint指针,这样我就不会在iOS 5下得到异常?
我尝试过以下操作,但在我的实现文件中遇到了编译器错误,即此约束未声明:
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0
NSLayoutConstraint *exampleConstraint;
#endif非常感谢您的建议
Linard
发布于 2013-05-28 10:35:53
#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 ...
}https://stackoverflow.com/questions/16780957
复制相似问题