iOS6上的Autolayout问题:“应该从引擎中删除所有依赖约束,也可以从视图的依赖约束列表中删除”

时间:2014-01-22 15:23:27

标签: ios objective-c autolayout

是否有人遇到过与autolayout相关的警告消息:

All dependent constraints should have been removed from the engine and also from the view's list of dependent constraints

目前,我们有一些内部有几个按钮的footerView,它们根据需要隐藏或显示。我们到处都使用完全自动布局。这是隐藏/显示此footerView的方法:

- (void)hideFooterView:(BOOL)shouldHide {

  self.containerViewBottomConstraint.constant = shouldHide ? 0 : 50; // expand  containing view to fit to full screen OR make it smaller to fit with footerView

  [UIView animateWithDuration:1 animations:^{
    [self.view layoutIfNeeded]; // animate expanding screen height to full height
    [self.footerView setAlpha:(shouldHide ? 0 : 1)];
  } completion:nil];  
}

因此,当第一次调用此方法时,则没有错误消息。但在第二次提到警告后出现在控制台中。我们不能忽略这个警告,因为在其他屏幕中我们遇到了私有Apple方法调用的崩溃,而没有任何线索如何解决这个问题:

[UILayoutContainerView nsis_shouldIntegralizeVariable:]: message sent to deallocated instance

这是另一条崩溃消息:

[UILayoutContainerView nsis_valueOfVariable:didChangeInEngine:]: message sent to deallocated instance

我无法在网络上找到与“nsis_valueOfVariable:didChangeInEngine:”或“Autolayout dependent constraints”关键字相关的任何有用信息。有什么想法吗?

更新注释掉行“[self.view layoutIfNeeded]”似乎修复了问题,但之后就没有动画......

1 个答案:

答案 0 :(得分:2)

在我的项目中也出现了这个问题。我得到同样的警告"所有相关的约束应该已经从引擎中移除,也从视图的依赖约束列表中删除了#34;。

正如你所说,当我忽略它并在其他屏幕中我崩溃了,显示

[UILayoutContainerView nsis_shouldIntegralizeVariable:]: message sent to deallocated instance

我发现,就我而言,我在[self.view layoutIfNeeded]内呼叫-(void)viewWillDisappear:(BOOL)animated。当我删除它时,问题得到解决。 没有警告也没有崩溃。

据我所知,如果我们在取消分配视图之前调用layoutIfNeeded,则会发出此警告。在下一个屏幕中,它会导致崩溃。

花了很多时间来弄清楚这次崩溃。这就是我分享想法的原因。

这可能有助于某人。