Vla*_*sov 4 macos xcode cocoa autolayout
我在 NSOutlineView 中遇到奇怪的崩溃:当我单击“折叠”按钮时,应用程序立即崩溃,甚至“异常断点”也无助于查看问题出在哪里。
我尝试在没有调试器的情况下运行应用程序,并重现了该问题。一旦应用程序崩溃,我就有了 OSX 崩溃窗口并且能够从那里提取崩溃消息:
The window has been marked as needing another Update Constraints in Window pass, but it has already had more Update Constraints in Window passes than there are views in the window
还有调用堆栈,但由于在 libsystem_c.dylib 内部发生崩溃,它无济于事,所以我不在这里发布它。
似乎自动布局有问题。完全不知道下一步。请给我一个建议!
此外,还有一件事,只有在更新到 OSX Mojave 后才开始。
经过数小时的调试和测试,我注意到该消息是由“无限布局循环”引起的。
与大纲视图相关的不同代码导致 NSSplitView 进行布局。并且委托方法- (CGFloat) splitView:(NSSplitView*)sender constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex在崩溃之前已经被调用了大约 200 次。
很难抓住这个 bcs 它实际上不是无限递归,所以只是调试器没有多大帮助。我只是添加了帮助我确定问题的简单代码:
static int a = 0;
NSLog(@"Layout: %d", a++);
希望我的经验能帮助别人!