Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 仅iOS 6指针的本地声明(例如NSLayoutConstraint)_Objective C_Ios6_Declaration_Autolayout_Nslayoutconstraint - Fatal编程技术网

Objective c 仅iOS 6指针的本地声明(例如NSLayoutConstraint)

Objective c 仅iOS 6指针的本地声明(例如NSLayoutConstraint),objective-c,ios6,declaration,autolayout,nslayoutconstraint,Objective C,Ios6,Declaration,Autolayout,Nslayoutconstraint,我有一个同时支持iOS 5和iOS 6的应用程序。 在一个类中,我需要在本地声明一些NSLayoutConstraint指针,这些指针仅限于iOS 6。 我只在iOS 6布局中使用它们,因为对于iOS 5,我会自动调整布局的大小。 此类用于iOS 5和iOS 6 有没有办法在类的头文件中声明一些NSLayoutConstraint指针,这样在iOS 5下就不会出现异常 我尝试了以下操作,但在我的实现文件中发现一个编译器错误,即此约束未声明: #if __IPHONE_OS_VERSION_MIN

我有一个同时支持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

#如果
是编译时预处理器指令,则编译后它不起作用。您的代码片段所做的只是在
\uuIphone\uOS\uVersion\uMin\uRequired>=\uIphone\u6\u0
为真的情况下包含定义-因此,当您将最小值设置为iOS 5时,将永远不会包含此声明

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

因此,在代码中,首先在声明周围放置
#if
,然后使用
NSLayoutConstraint
的和代码必须包含在条件中,该条件仅在类型存在时执行。比如:

NSLayoutConstraint *exampleConstraint;
...

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

if( haveNSLayoutConstraint )
{
   ... exampleConstraint ...
}

顺便说一句,如果你支持iOS5,我很惊讶你竟然会使用自动布局(即使只针对iOS6应用程序)。为什么不完全关闭自动布局呢?iOS6中不需要它。如果你在iOS5中使用自动调整大小的掩码,布局工作正常,那么当应用程序在ios6上运行时,为什么不使用它呢?如果你的应用程序在iOS 5上运行时没有自动布局,那么为什么还要使用iOS 6特定的自动布局格式副本来重复你的工作呢?非自动布局代码在iOS6上应该可以很好地工作,我感到您不必要地重复了您的工作。@Rob:我也在使用自动布局来支持iphone5。我也可以在没有自动布局的情况下解决这个问题,但无论如何我都需要第三个故事板,也许将来使用自动布局可能会有好处正如你所指出的,支持iPhone 5不需要自动布局。同时使用autolayout和non-autolayout是加倍的努力,没有明显的好处。别误会:Autolayout提供了一些很棒的功能,但我个人不建议采用它,除非你愿意放弃iOS 5的向后兼容性。如果你真的愿意,可以采用双重自动布局和非自动布局的方法,但我觉得这是一项额外的工作,没有什么好处。我建议只使用iOS 6+的应用程序进行自动布局。@Rob:我明白你的观点。我当前的更新版本具有iOS 5向后兼容性,但我认为随着iOS 7的推出,我将只支持iOS 6和iOS 7。非常感谢您的回答。如果我理解正确,只需行“NSLayoutConstraint*exampleConstraint;”不会产生异常。这是真的吗?