如何调试错误的访问代码2错误?

时间:2014-04-14 18:42:21

标签: ios objective-c

我的iOS应用程序在应用程序中的某个点崩溃。我每次都可以重现崩溃。我只是无法弄清楚为什么会崩溃。我运行了探查器并检查了僵尸 - 没有找到。

首先在两个地方崩溃的方法是这个方法:

    -(void)toolBarHidden:(BOOL)hidden
{
    self.toolbar.clipsToBounds = YES;

    if (!hidden){

    self.toolbar.hidden = NO;
        self.toolBarHeightContraint.constant = 35;
        self.toolBarBottomContraint.constant = 0;


        [UIView animateWithDuration:0.5
                              delay:0
             usingSpringWithDamping:0.5
              initialSpringVelocity:0.5
                            options:0
                         animations:^{

                             [self.view layoutSubviews];

                         } completion:nil];
    }else
    {
    self.toolbar.hidden = YES;
        self.toolBarHeightContraint.constant = 1;
        self.toolBarBottomContraint.constant = 0;
        [UIView animateWithDuration:0.5
                              delay:0
             usingSpringWithDamping:0.5
              initialSpringVelocity:0.5
                            options:0
                         animations:^{
                             //
                             [self.view layoutSubviews];

                         } completion:nil];


    }
}

在此链接:

        self.toolbar.hidden = NO;

如果我将其评论出来 - 当应用程序再次崩溃时,断点会在下一行停止。

如果我完全评论该方法,应用程序会以类似的方式崩溃,就在它下面有这个代码:

    -(void)shouldMoveCollectionViewDown:(BOOL)move
{
    UIEdgeInsets insetDown = UIEdgeInsetsMake(41, 0, 0, 0);
    UIEdgeInsets insetUp = UIEdgeInsetsMake(0, 0, 0, 0);

    if (move){
        self.scrollbarView.hidden = NO;

        [self.tradeFeedCollectionView setContentInset:insetDown];
    }else {
        self.scrollbarView.hidden = YES;
        [self.tradeFeedCollectionView setContentInset:insetUp];
    }
}

在这一行:

            self.scrollbarView.hidden = NO;

如果我评论两种方法。没有崩溃。我还能做些什么来调试此崩溃?

修改

这是控制台所说的。之前我没有在此问题中添加它的原因是由于在应用运行时期间看到此错误几次并且它没有引起问题。我有人认为它现在与之相关 - 但是,我不知道如何解决它。

  
    

无法同时满足约束条件。可能至少以下列表中的一个约束是您不想要的约束。尝试     这个:(1)看看每个约束并试着弄清楚你是哪个     不要指望; (2)找到添加了不需要的约束的代码或     约束并修复它。 (注意:如果您正在看到     您不了解的NSAutoresizingMaskLayoutConstraints,请参阅     到UIView属性的文档     translatesAutoresizingMaskIntoConstraints)(         "&#34 ;,         "&#34 ;,         "&#34 ;,         "" )

  
     

将尝试通过违反约束来恢复   

     

中断objc_exception_throw以在调试器中捕获它。该   UIView上的UIConstraintBasedLayoutDebugging类中的方法   列出来也可能有帮助。

以下是错误的屏幕截图和堆栈跟踪的顶部:

enter image description here

1 个答案:

答案 0 :(得分:1)

您的堆栈跟踪似乎表示无限循环,其中一个调用的方法(可能在委托scrollViewDidScroll内)导致递归。然后崩溃以防止计算机冻结。

调试:

  • 在此方法的开头放置一个断点,并继续执行以确保您每次都回到同一个地方,
  • 然后,尝试确定该委托的哪个部分可能会有一些代码再次触发它。

例如,设置一些插图可能会使布局无效,重新绘制并重新定位上一个位置的滚动,从而导致无意中触发代理。

请注意,您的代码会涉及有关不满足约束的抱怨,但这并不是引发异常的原因。但它仍然是一个错误,可能会导致意外的布局。