应用程序崩溃有时意见之间转换时:如何调试限制? [英] App crashing sometimes when transitioning between views: how to debug constraints?

查看:478
本文介绍了应用程序崩溃有时意见之间转换时:如何调试限制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我执行与动画视图之间的过渡。有时工作,而且有时也导致系统崩溃,我不明白为什么。我有一个在 @试戴我的code @捕块,但没有异常在 @catch 检索。我只是得到一个SIGABRT信号的应用程序崩溃和以下日志:


  

2015年9月23日10:03:43.420我的应用程序[1510:528283]视图层次不ppared为约束$ P $:
      当添加到视图,约束的物品必须是视图(或视图本身)的后裔。如果约束所需​​要的视图层次组装之前解决这将崩溃。打破 - [UIView的(UIConstraintBasedLayout)_viewHierarchyUn preparedForConstraint:]调试


  
  

2015年9月23日10:03:43.421我的应用程序[1510:528283 ***在断言失败 - [UIView的_layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:] /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3505.16/NSLayoutConstraint_UIKitAdditions.m:590


我不明白为什么它有时工作以及其他的崩溃次,我不明白我怎么能调试此,请我需要帮助。

在此先感谢

编辑:

这是一个似乎会导致应用程序崩溃的方法:

   - (无效)switchToMainView
{
   [UIView的transitionWithView:self.view
                     持续时间:1.0
                      选项​​:UIViewAnimationOptionTransitionFlipFromRight
                动画:^ {
                    @try {
                        如果([self.secView上海华]){
                            [个体经营setMainView]
                            [self.secView removeFromSuperview]
                            [self.view addSubview:self.mainView];
                            [self.view sendSubviewToBack:self.secView];
                        }
                    }
                    @catch(NSException *除外){
                        的NSLog(@例外:%@,exception.description);
                    }
                }
                完成:^(BOOL完){
                    如果(成品){
                        @try {
                            [self.view setNeedsUpdateConstraints]
                            [个体经营setMessage]
                        }
                        @catch(NSException *除外){
                            的NSLog(@例外:%@,exception.description);
                        }
                    }
                }];
}

以及 setMessage 方法被调用完成块:

   - (无效)setMessage
{
   UIView的* =消息查看零;   @try {
      消息查看= [[[一个NSBundle mainBundle] loadNibNamed:@消息查看老板:无选项:无] firstObject]      messageView.frame = CGRectMake(0,0,self.messagesContainerView.frame.size.width,self.messagesContainerView.frame.size.height);
      [self.messagesContainerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
      [self.messagesContainerView addSubview:消息查看]。
   }
   @catch(NSException *除外){
      的NSLog(@例外:%@,exception.description);
   }
}

其中, self.messagesContainerView self.mainView 的第一方法的子视图。

再次感谢

编辑2:

这是我设法弄到最后崩溃信息:


  

日期/时间:2015年9月24日10时01分13秒+0000 OS版本:iPhone OS
  9.0(13A344)报告版本:104


  
  

异常类型:SIGABRT异常codeS:#0在0x34de0d24坠毁
  主题:0


  
  

应用程序的具体信息:
  ***终止应用程序由于未捕获的异常'NSInternalInconsistencyException,理由是:不可能建立
  布局ppared的约束视图层次未$ P $'。


  
  

上次异常回溯:0的CoreFoundation结果
  0x22ee786b 0x22df2000 + 1005675 1 libobjc.A.dylib结果
  0x345e6dff 0x345e0000 + 28159 2的CoreFoundation结果
  0x22ee7741 0x22df2000 + 1005377 3基金会结果
  0x23c772ab 0x23be0000 + 619179 4 UIKit的结果
  0x277ced17 0x26fe7000 + 8289559 5 UIKit的结果
  0x270f8b1b 0x26fe7000 + 1121051 6 UIKit的结果
  0x270f898d 0x26fe7000 + 1120653 7 UIKit的结果
  0x270f88a7 0x26fe7000 + 1120423 8 UIKit的结果
  0x277cee6d 0x26fe7000 + 8289901 9 UIKit的结果
  0x270f878f 0x26fe7000 + 1120143 10我的应用程式结果
  0x000423c5 0×11000 + 201669 11 UIKit的结果
  0x277d479d 0x26fe7000 + 8312733 12基金会结果
  0x23c29c81 0x23be0000 + 302209 13 UIKit的结果
  0x270fbaa9 0x26fe7000 + 1133225 14 UIKit的结果
  0x277d49d9 0x26fe7000 + 8313305 15 UIKit的结果
  0x270fc78b 0x26fe7000 + 1136523 16基金会结果
  0x23c29c81 0x23be0000 + 302209 17 UIKit的结果
  0x270fbaa9 0x26fe7000 + 1133225 18 UIKit的结果
  0x270fc487 0x26fe7000 + 1135751 19 UIKit的结果
  0x277d4fa5 0x26fe7000 + 8314789 20 UIKit的结果
  0x272edfa9 0x26fe7000 + 3174313 21 UIKit的结果
  0x26ff56bb 0x26fe7000 + 59067 22 QuartzCore结果
  0x268c167d 0x268b4000 + 54909 23 QuartzCore结果
  0x268bcd79 0x268b4000 + 36217 24 QuartzCore结果
  0x268bcc09 0x268b4000 + 35849 25 QuartzCore结果
  0x268bc129 0x268b4000 + 33065 26 QuartzCore结果
  0x268bbdeb 0x268b4000 + 32235 27 QuartzCore结果
  0x268b55bf 0x268b4000 + 5567 28的CoreFoundation结果
  0x22eaa0f1 0x22df2000 + 753905 29的CoreFoundation结果
  0x22ea83e7 0x22df2000 + 746471 30的CoreFoundation结果
  0x22ea8825 0x22df2000 + 747557 31的CoreFoundation结果
  0x22dfb1e9 0x22df2000 + 37353 32的CoreFoundation结果
  0x22dfafdd 0x22df2000 + 36829 33 GraphicsServices结果
  0x2c09faf9 0x2c096000 + 39673 34 UIKit的结果
  0x2706018d 0x26fe7000 + 496013 35我的应用结果
  0x000d7d69 0×11000 + 814441 36 libdyld.dylib结果
  0x34d11873 0x34d0f000 + 10355


  
  

主题0坠毁:0 libsystem_kernel.dylib 0x34de0d24
  0x34dcc000 + 85284 1 libsystem_c.dylib 0x34d78f51
  0x34d2e000 + 307025 2我的应用0x001abebf
  0×11000 + 1683135 3的CoreFoundation 0x22ee7ba9
  0x22df2000 + 1006505 4 libobjc.A.dylib结果
  0x345e7087 0x345e0000 + 28807 5的libc ++ abi.dylib结果
  0x33dcce17 0x33db6000 + 93719 6的libc ++ abi.dylib结果
  0x33dcc8f7 0x33db6000 + 92407 7 libobjc.A.dylib结果
  0x345e6f47 0x345e0000 + 28487 8的CoreFoundation结果
  0x22dfb26f 0x22df2000 + 37487 9的CoreFoundation结果
  0x22dfafdd 0x22df2000 + 36829 10 GraphicsServices结果
  0x2c09faf9 0x2c096000 + 39673 11 UIKit的结果
  0x2706018d 0x26fe7000 + 496013 12我的应用结果
  0x000d7d69 0×11000 + 814441 13 libdyld.dylib结果
  0x34d11873 0x34d0f000 + 10355



解决方案

在没有看到您的code很难调试的实际问题。可能的原因是:


  • 您添加制约一种观点认为是不约束类的上海华。

  • 在视图层次等不 -
  • 您添加制约尚未添加作为一个子视图还没有一个视图。

至于修复它。我设法创建一个崩溃这样的一个项目,并作为错误提示添加一个象征性的断点正确地找到错误:

在这里输入的形象描述

所以,试试这个,看看你的问题的根源。

I perform a transition between views with an animation. It sometimes works, and it also sometimes causes a crash and I don't understand why. I have my code within a @try-@catch block but no exception is retrieved in @catch. I simply get an app crash with a SIGABRT signal and the following log:

2015-09-23 10:03:43.420 My App[1510:528283] The view hierarchy is not prepared for the constraint: When added to a view, the constraint's items must be descendants of that view (or the view itself). This will crash if the constraint needs to be resolved before the view hierarchy is assembled. Break on -[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] to debug.

2015-09-23 10:03:43.421 My App[1510:528283] *** Assertion failure in -[UIView _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3505.16/NSLayoutConstraint_UIKitAdditions.m:590

I don't understand why it sometimes works and other times it crashes, and I don't understand how can I debug this, please I need help.

Thanks in advance

EDIT:

This is the method that seems to cause the app crashes:

- (void)switchToMainView
{
   [UIView transitionWithView:self.view
                     duration:1.0
                      options:UIViewAnimationOptionTransitionFlipFromRight
                animations:^{
                    @try {
                        if ([self.secView superview]) {
                            [self setMainView];
                            [self.secView removeFromSuperview];
                            [self.view addSubview:self.mainView];
                            [self.view sendSubviewToBack:self.secView];
                        }
                    }
                    @catch (NSException *exception) {
                        NSLog(@"exception: %@", exception.description);
                    }
                }
                completion:^(BOOL finished){
                    if (finished) {
                        @try {
                            [self.view setNeedsUpdateConstraints];
                            [self setMessage];
                        }
                        @catch (NSException *exception) {
                            NSLog(@"exception: %@", exception.description);
                        }
                    }
                }];
}

And the setMessage method that is called in the completion block:

- (void)setMessage
{
   UIView *messageView = nil;

   @try {
      messageView = [[[NSBundle mainBundle] loadNibNamed:@"MessageView" owner:nil options:nil] firstObject];

      messageView.frame = CGRectMake(0, 0, self.messagesContainerView.frame.size.width, self.messagesContainerView.frame.size.height);
      [self.messagesContainerView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
      [self.messagesContainerView addSubview:messageView];
   }
   @catch (NSException *exception) {
      NSLog(@"exception: %@", exception.description);
   }
}

where self.messagesContainerView is a subview of self.mainView in the first method.

Thanks again

EDIT 2:

This is the last crash information I managed to get:

Date/Time: 2015-09-24 10:01:13 +0000 OS Version: iPhone OS 9.0 (13A344) Report Version: 104

Exception Type: SIGABRT Exception Codes: #0 at 0x34de0d24 Crashed Thread: 0

Application Specific Information: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Impossible to set up layout with view hierarchy unprepared for constraint.'

Last Exception Backtrace: 0 CoreFoundation
0x22ee786b 0x22df2000 + 1005675 1 libobjc.A.dylib
0x345e6dff 0x345e0000 + 28159 2 CoreFoundation
0x22ee7741 0x22df2000 + 1005377 3 Foundation
0x23c772ab 0x23be0000 + 619179 4 UIKit
0x277ced17 0x26fe7000 + 8289559 5 UIKit
0x270f8b1b 0x26fe7000 + 1121051 6 UIKit
0x270f898d 0x26fe7000 + 1120653 7 UIKit
0x270f88a7 0x26fe7000 + 1120423 8 UIKit
0x277cee6d 0x26fe7000 + 8289901 9 UIKit
0x270f878f 0x26fe7000 + 1120143 10 My App
0x000423c5 0x11000 + 201669 11 UIKit
0x277d479d 0x26fe7000 + 8312733 12 Foundation
0x23c29c81 0x23be0000 + 302209 13 UIKit
0x270fbaa9 0x26fe7000 + 1133225 14 UIKit
0x277d49d9 0x26fe7000 + 8313305 15 UIKit
0x270fc78b 0x26fe7000 + 1136523 16 Foundation
0x23c29c81 0x23be0000 + 302209 17 UIKit
0x270fbaa9 0x26fe7000 + 1133225 18 UIKit
0x270fc487 0x26fe7000 + 1135751 19 UIKit
0x277d4fa5 0x26fe7000 + 8314789 20 UIKit
0x272edfa9 0x26fe7000 + 3174313 21 UIKit
0x26ff56bb 0x26fe7000 + 59067 22 QuartzCore
0x268c167d 0x268b4000 + 54909 23 QuartzCore
0x268bcd79 0x268b4000 + 36217 24 QuartzCore
0x268bcc09 0x268b4000 + 35849 25 QuartzCore
0x268bc129 0x268b4000 + 33065 26 QuartzCore
0x268bbdeb 0x268b4000 + 32235 27 QuartzCore
0x268b55bf 0x268b4000 + 5567 28 CoreFoundation
0x22eaa0f1 0x22df2000 + 753905 29 CoreFoundation
0x22ea83e7 0x22df2000 + 746471 30 CoreFoundation
0x22ea8825 0x22df2000 + 747557 31 CoreFoundation
0x22dfb1e9 0x22df2000 + 37353 32 CoreFoundation
0x22dfafdd 0x22df2000 + 36829 33 GraphicsServices
0x2c09faf9 0x2c096000 + 39673 34 UIKit
0x2706018d 0x26fe7000 + 496013 35 My App
0x000d7d69 0x11000 + 814441 36 libdyld.dylib
0x34d11873 0x34d0f000 + 10355

Thread 0 Crashed: 0 libsystem_kernel.dylib 0x34de0d24 0x34dcc000 + 85284 1 libsystem_c.dylib 0x34d78f51 0x34d2e000 + 307025 2 My App 0x001abebf 0x11000 + 1683135 3 CoreFoundation 0x22ee7ba9 0x22df2000 + 1006505 4 libobjc.A.dylib
0x345e7087 0x345e0000 + 28807 5 libc++abi.dylib
0x33dcce17 0x33db6000 + 93719 6 libc++abi.dylib
0x33dcc8f7 0x33db6000 + 92407 7 libobjc.A.dylib
0x345e6f47 0x345e0000 + 28487 8 CoreFoundation
0x22dfb26f 0x22df2000 + 37487 9 CoreFoundation
0x22dfafdd 0x22df2000 + 36829 10 GraphicsServices
0x2c09faf9 0x2c096000 + 39673 11 UIKit
0x2706018d 0x26fe7000 + 496013 12 My App
0x000d7d69 0x11000 + 814441 13 libdyld.dylib
0x34d11873 0x34d0f000 + 10355

解决方案

Without seeing your code It's hard to debug the actual problem. The probably causes are:

  • You are adding a constraint to a view that is not a superview of the constrained class.
  • You are adding a constraint to a view that has not been added as a subview yet - and so is not in the view hierarchy.

As to fixing it. I managed to create a project which crashes in this way, and correctly found the mistake by adding a symbolic breakpoint as the error suggests:

So try this and see where your problem is coming from.

这篇关于应用程序崩溃有时意见之间转换时:如何调试限制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆