首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅限iOS 6指针的本地声明(例如NSLayoutConstraint)

仅限iOS 6指针的本地声明(例如NSLayoutConstraint)
EN

Stack Overflow用户
提问于 2013-05-28 05:50:02
回答 1查看 206关注 0票数 0

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

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

我尝试过以下操作,但在我的实现文件中遇到了编译器错误,即此约束未声明:

代码语言:javascript
复制
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0
NSLayoutConstraint *exampleConstraint;
#endif

非常感谢您的建议

Linard

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的代码必须包含在一个条件中,该条件只有在该类型存在时才会执行。类似于:

代码语言:javascript
复制
NSLayoutConstraint *exampleConstraint;
...

BOOL haveNSLayoutConstraint = [NSLayoutConstraint class] != nil;
...

if( haveNSLayoutConstraint )
{
   ... exampleConstraint ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16780957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档