<legend id='Ddpvr'><style id='Ddpvr'><dir id='Ddpvr'><q id='Ddpvr'></q></dir></style></legend>

<small id='Ddpvr'></small><noframes id='Ddpvr'>

    <i id='Ddpvr'><tr id='Ddpvr'><dt id='Ddpvr'><q id='Ddpvr'><span id='Ddpvr'><b id='Ddpvr'><form id='Ddpvr'><ins id='Ddpvr'></ins><ul id='Ddpvr'></ul><sub id='Ddpvr'></sub></form><legend id='Ddpvr'></legend><bdo id='Ddpvr'><pre id='Ddpvr'><center id='Ddpvr'></center></pre></bdo></b><th id='Ddpvr'></th></span></q></dt></tr></i><div id='Ddpvr'><tfoot id='Ddpvr'></tfoot><dl id='Ddpvr'><fieldset id='Ddpvr'></fieldset></dl></div>

    1. <tfoot id='Ddpvr'></tfoot>
        <bdo id='Ddpvr'></bdo><ul id='Ddpvr'></ul>

      关闭视图控制器时发生奇怪的崩溃,自动布局是罪魁祸首?

      时间:2023-09-11

    2. <tfoot id='fvKUL'></tfoot>

      <small id='fvKUL'></small><noframes id='fvKUL'>

        <tbody id='fvKUL'></tbody>
      1. <i id='fvKUL'><tr id='fvKUL'><dt id='fvKUL'><q id='fvKUL'><span id='fvKUL'><b id='fvKUL'><form id='fvKUL'><ins id='fvKUL'></ins><ul id='fvKUL'></ul><sub id='fvKUL'></sub></form><legend id='fvKUL'></legend><bdo id='fvKUL'><pre id='fvKUL'><center id='fvKUL'></center></pre></bdo></b><th id='fvKUL'></th></span></q></dt></tr></i><div id='fvKUL'><tfoot id='fvKUL'></tfoot><dl id='fvKUL'><fieldset id='fvKUL'></fieldset></dl></div>
              <bdo id='fvKUL'></bdo><ul id='fvKUL'></ul>
              1. <legend id='fvKUL'><style id='fvKUL'><dir id='fvKUL'><q id='fvKUL'></q></dir></style></legend>

              2. 本文介绍了关闭视图控制器时发生奇怪的崩溃,自动布局是罪魁祸首?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我遇到了一个非常奇怪的崩溃,这是回溯.

                I am experiencing a very strange crash, here is the backtrace.

                * thread #1: tid = 0x2403, 0x3379516c CoreFoundation`CFHash + 8, stop reason = EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe)
                    frame #0: 0x3379516c CoreFoundation`CFHash + 8
                    frame #1: 0x33797a9c CoreFoundation`CFBasicHashRemoveValue + 1408
                    frame #2: 0x337974ee CoreFoundation`CFDictionaryRemoveValue + 166
                    frame #3: 0x3420988e Foundation`-[NSISEngine removeConstraintWithMarker:] + 562
                    frame #4: 0x34211dbe Foundation`-[NSLayoutConstraint _removeFromEngine:] + 230
                    frame #5: 0x35a954ec UIKit`-[UIView(UIConstraintBasedLayout) _layoutEngine_willRemoveLayoutConstraint:] + 44
                    frame #6: 0x358488fc UIKit`__48-[UIScrollView _setAutomaticContentConstraints:]_block_invoke_0 + 148
                    frame #7: 0x34208882 Foundation`-[NSISEngine withAutomaticOptimizationDisabled:] + 166
                    frame #8: 0x35848838 UIKit`-[UIScrollView _setAutomaticContentConstraints:] + 116
                    frame #9: 0x35848e6c UIKit`-[UIScrollView _rememberDependentConstraint:] + 112
                    frame #10: 0x35a9e3ae UIKit`___updateViewDependenciesForConstraint_block_invoke_0 + 30
                    frame #11: 0x35a954ba UIKit`_updateViewDependenciesForConstraint + 202
                    frame #12: 0x35a953da UIKit`-[UIView(UIConstraintBasedLayout) _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:] + 154
                    frame #13: 0x35a95534 UIKit`-[UIView(UIConstraintBasedLayout) _tryToAddConstraintWithoutUpdatingConstraintsArray:roundingAdjustment:mutuallyExclusiveConstraints:] + 36
                    frame #14: 0x3567c2e0 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 376
                    frame #15: 0x356d34fe UIKit`-[UIScrollView _didMoveFromWindow:toWindow:] + 50
                    frame #16: 0x3567c5c6 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 1118
                    frame #17: 0x35676e52 UIKit`-[UIView(Hierarchy) _postMovedFromSuperview:] + 138
                    frame #18: 0x3565e7dc UIKit`-[UIView(Internal) _addSubview:positioned:relativeTo:] + 1300
                    frame #19: 0x3565e2c2 UIKit`-[UIView(Hierarchy) addSubview:] + 30
                    frame #20: 0x356f68e8 UIKit`-[UITransitionView transition:fromView:toView:removeFromView:] + 972
                    frame #21: 0x35937618 UIKit`__91-[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]_block_invoke_0238 + 388
                    frame #22: 0x357499b8 UIKit`-[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 4824
                    frame #23: 0x357b9814 UIKit`-[UIViewController _dismissViewControllerWithTransition:from:completion:] + 1708
                    frame #24: 0x357057c4 UIKit`-[UIViewController dismissViewControllerWithTransition:completion:] + 912
                    frame #25: 0x000ccd40 Capture`-[INFTagSearchViewController cancelButtonTouched:](self=0x1f09ed50, _cmd=0x001b9d5f, sender=0x1e0265c0) + 76 at INFTagSearchViewController.m:48
                    frame #26: 0x357470c4 UIKit`-[UIApplication sendAction:to:from:forEvent:] + 72
                    frame #27: 0x35747076 UIKit`-[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30
                    frame #28: 0x35747054 UIKit`-[UIControl sendAction:to:forEvent:] + 44
                    frame #29: 0x3574690a UIKit`-[UIControl(Internal) _sendActionsForEvents:withEvent:] + 502
                    frame #30: 0x35746e00 UIKit`-[UIControl touchesEnded:withEvent:] + 488
                    frame #31: 0x3566f5f0 UIKit`-[UIWindow _sendTouchesForEvent:] + 524
                    frame #32: 0x3565c800 UIKit`-[UIApplication sendEvent:] + 380
                    frame #33: 0x3565c11a UIKit`_UIApplicationHandleEvent + 6154
                    frame #34: 0x373655a2 GraphicsServices`_PurpleEventCallback + 590
                    frame #35: 0x373651d2 GraphicsServices`PurpleEventCallback + 34
                    frame #36: 0x33829172 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 34
                    frame #37: 0x33829116 CoreFoundation`__CFRunLoopDoSource1 + 138
                    frame #38: 0x33827f98 CoreFoundation`__CFRunLoopRun + 1384
                    frame #39: 0x3379aebc CoreFoundation`CFRunLoopRunSpecific + 356
                    frame #40: 0x3379ad48 CoreFoundation`CFRunLoopRunInMode + 104
                    frame #41: 0x373642ea GraphicsServices`GSEventRunModal + 74
                    frame #42: 0x356b0300 UIKit`UIApplicationMain + 1120
                    frame #43: 0x000a297c Capture`main(argc=1, argv=0x2fd60cfc) + 116 at main.m:16
                    frame #44: 0x3bb2bb20 libdyld.dylib`start + 4
                

                你会注意到第 25 帧是我的代码进行的唯一调用,它是 cancelButtonTouched,看起来像.

                You will notice frame 25 is the only call my code makes, and it is cancelButtonTouched which looks like.

                - (IBAction)cancelButtonTouched:(id)sender {
                    [self dismissViewControllerAnimated:YES completion:nil];
                }
                

                我不知道发生了什么,我以前从未遇到过这样的问题,根据系统调用,这似乎是一个自动布局问题.我验证了在崩溃发生之前在呈现视图控制器上调用了 viewWillApper,所以我认为它是在呈现视图布局期间发出的.

                I am at a loss as to what is going on, I've never had an issue like this before, based on the system calls it appears to be an auto-layout issue. I verified that viewWillApper is called on the presenting view controller before the crash occurs, so I assume it is an issuing during layout of the presenting view.

                关于如何将此问题缩小到特定布局约束的任何想法?还是有其他想法?

                Any ideas on how to narrow this issue down to a specific layout contstraint? Or any other ideas?

                这可以在某些设备上重现,而在其他设备上则很少发生.所以它是间歇性的.

                This is reproduceable on some devices, where as on others it rarely if ever happens. So it is intermittent.

                更新

                断点截图.

                更新 2

                因此,解除到 presentingViewController 绝对是一个问题,解除两个级别的深度 ([self.presentingViewController.presentingViewControllerdismissViewControllerAnimated:YES completion:nil]) 工作正常,但显然不是想要的结果,我只想回到1级.这进一步让我相信重新布局"视图存在问题.

                So it is definitely an issue with dismissing to the presentingViewController, dismissing two levels deep ([self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]) works fine, but obviously not the desired result, I only want to go back 1 level. This further leads me to believe there is an issue "re-laying" out the view.

                推荐答案

                基于 Carl Lindberg 的想法,我准备并使用了以下 iOS 类别,现在我没有崩溃了:

                Based on idea of Carl Lindberg I prepared and used the following iOS category and I have no crash anymore:

                UIView+AddSubviewWithRemovingFromParent.h

                UIView+AddSubviewWithRemovingFromParent.h

                #import <UIKit/UIKit.h>
                
                @interface UIView (AddSubviewWithRemovingFromParent)
                
                - (void)addSubviewWithRemovingFromParent:(UIView *)view;
                
                @end
                

                UIView+AddSubviewWithRemovingFromParent.m

                UIView+AddSubviewWithRemovingFromParent.m

                #import "UIView+AddSubviewWithRemovingFromParent.h"
                
                @implementation UIView (AddSubviewWithRemovingFromParent)
                
                - (void)addSubviewWithRemovingFromParent:(UIView *)view {
                    if (view.superview != nil) {
                        [view removeFromSuperview];
                    }
                    [self addSubview:view];
                }
                
                @end
                

                现在您可以使用 addSubviewWithRemovingFromParent 方法添加 subView 而不是 addSubview 方法,如下所示:

                now you can use the addSubviewWithRemovingFromParent method to add the subView instead of addSubview method like this:

                UITableViewCell *cell = [[UITableViewCell alloc] init];
                [cell.contentView addSubviewWithRemovingFromParent:<viewToAdd>];
                

                总结一下:

                1. 在应用所在的控制器中找到所有 addSubView 的引用崩溃了
                2. 导入类别 UIView+AddSubviewWithRemovingFromParent.h
                3. 使用方法 addSubviewWithRemovingFromParent 而不是 addSubView

                这篇关于关闭视图控制器时发生奇怪的崩溃,自动布局是罪魁祸首?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:如何在不使用代码的情况下使用约束 AutoLayout 来指定横向与纵向的不同布局? 下一篇:嵌入在其他视图中的 UITableView 的节标题位置错误

                相关文章

                  <bdo id='bz67h'></bdo><ul id='bz67h'></ul>

                1. <small id='bz67h'></small><noframes id='bz67h'>

                  <i id='bz67h'><tr id='bz67h'><dt id='bz67h'><q id='bz67h'><span id='bz67h'><b id='bz67h'><form id='bz67h'><ins id='bz67h'></ins><ul id='bz67h'></ul><sub id='bz67h'></sub></form><legend id='bz67h'></legend><bdo id='bz67h'><pre id='bz67h'><center id='bz67h'></center></pre></bdo></b><th id='bz67h'></th></span></q></dt></tr></i><div id='bz67h'><tfoot id='bz67h'></tfoot><dl id='bz67h'><fieldset id='bz67h'></fieldset></dl></div>

                  1. <legend id='bz67h'><style id='bz67h'><dir id='bz67h'><q id='bz67h'></q></dir></style></legend><tfoot id='bz67h'></tfoot>