2012-09-17 28 views
14

我有我的LayoutConstraints工作正常,然后突然间,我开始得到这个时,添加约束到我的看法。约束必须包含第一个布局项NSLayoutConstraint

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Constraint must contain a first layout item' 
*** First throw call stack: 
(0x7cd012 0x2017e7e 0x7ccdeb 0xde6bf1 0x9c487 0x994a3 0x414fb 0x20224 0x5c6c0 0xc30e83 0x78c376 0x78be06 0x773a82 0x772f44 0x772e1b 0x28eb7e3 0x28eb668 0x149465c 0x2cfd 0x2c25) 
libc++abi.dylib: terminate called throwing an exception 

还有互联网的苹果文档上或不存在直接的文档说明错误消息意味着什么。

想知道是否有人遇到这个错误,并知道我能做些什么来解决它?

回答

21

啊,发现问题了。 对于任何有此问题的人来说,这是因为该视图尚未在nib/UIView中创建,所以不能应用任何约束。

我将约束代码从initWithNib方法移至viewDidLoad,错误自然停止发生。

+0

即使约束在viewDidLoad中创建/添加,我也会收到崩溃。 –

+0

向我们展示您的代码,这将是简单的 –

33

此错误/崩溃的另一个原因可能是,传递给[NSLayoutContraint constraintWithItem ...]方法的视图为零。

+0

@smileBot我设置为强壮但返回零。我已经扩展了UIView和loadNib文件并更新了约束,但由于self.subView而导致崩溃。 [self addConstraint:[NSLayoutConstraint constraintWithItem:self.subView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]]; –

0

如果您关闭自动布局由于某种原因,这也有可能发生,但你仍然可以通过代码添加约束任何子视图(如处理方向变化)

这发生在我身上时,我用不同的NIB的对于iPhone和iPad,并在使用常见的.m文件时仅关闭iPhone NIB的Autolay。

解决方案是检查设备类型并跳过不需要的布局添加。

+0

@smileBot我设置为强,但返回零。我已经扩展了UIView和loadNib文件并更新了约束,但由于self.subView而导致崩溃。 [self addConstraint:[NSLayoutConstraint constraintWithItem:self.subView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]]; –

7

如果你对属性的看法一直坚持,确保它们很强大!这可以解释为零。

+0

切换到强固定我的问题。谢谢! –

+0

这里一样,切换到强固定的问题。 – blackmoon

+0

@smileBot我设置为强壮,但返回零。我已经扩展了UIView和loadNib文件并更新了约束,但由于self.subView而导致崩溃。 [self addConstraint:[NSLayoutConstraint constraintWithItem:self.subView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]]; –

相关问题