Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 奇怪的纳威坠机事件_Xcode_Macos_Cocoa_Autolayout - Fatal编程技术网

Xcode 奇怪的纳威坠机事件

Xcode 奇怪的纳威坠机事件,xcode,macos,cocoa,autolayout,Xcode,Macos,Cocoa,Autolayout,我在NSOutlineView中遇到了奇怪的崩溃:当我单击“崩溃”按钮时,应用程序立即崩溃,甚至“异常断点”也无助于查看问题所在 我尝试在没有调试器的情况下运行应用程序,并重现了这个问题。一旦应用程序崩溃,我就有了OSX崩溃窗口,并能够从中提取崩溃消息: 该窗口已被标记为需要窗口过程中的另一个更新约束,但它在窗口过程中的更新约束已超过窗口中的视图数量 这里也有调用堆栈,但它不会有帮助,因为libsystem_c.dylib内部发生了崩溃,所以我不在这里发布它 似乎自动布局有问题。我完全不知道下一

我在NSOutlineView中遇到了奇怪的崩溃:当我单击“崩溃”按钮时,应用程序立即崩溃,甚至“异常断点”也无助于查看问题所在

我尝试在没有调试器的情况下运行应用程序,并重现了这个问题。一旦应用程序崩溃,我就有了OSX崩溃窗口,并能够从中提取崩溃消息:

该窗口已被标记为需要窗口过程中的另一个更新约束,但它在窗口过程中的更新约束已超过窗口中的视图数量

这里也有调用堆栈,但它不会有帮助,因为libsystem_c.dylib内部发生了崩溃,所以我不在这里发布它

似乎自动布局有问题。我完全不知道下一步该怎么做。请给我一个建议


另外,还有一件事是在OSX Mojave更新之后才开始的

尝试关闭nib中的“使用自动布局”复选框(在“文件检查器”选项卡中)。 可能必须为每个视图禁用它

同样,不相关,但Mojave强制您使用核心动画。 我的大多数笔尖都关闭了“设置想要的图层”。 然而,在我的一个笔尖上,我勾选了一个杂散的SetWantLayer复选框。
当我取消选中它时,视图(NSSearchField)正确绘制

经过数小时的调试和测试,我注意到该消息是由“无限布局循环”引起的

与大纲视图相关的不同代码导致NSSplitView布局不一致。委托方法
-(CGFloat)splitView:(NSSplitView*)发送方约束mincoordinate:(CGFloat)建议的子视图最小位置在:(NSInteger)dividerIndex
崩溃前已被调用大约200次

很难捕捉到这种bcs,因为它实际上不是无限递归,所以调试器并没有多大帮助。 我刚刚添加了帮助我识别问题的简单代码:

static int a=0;
NSLog(@“布局:%d”,a++);


希望我的经验能帮助别人

我将我的版本更新为IOS 14和Mac OS 20.15.6,错误消失。

从Xcode菜单栏中,选择产品>方案>编辑方案。在左侧列表中选择“运行”。然后选择右侧区域中的“诊断”选项卡。打开“地址消毒器”和“僵尸对象”旁边的复选框。单击“关闭”。运行应用程序并尝试重现问题。设置这些选项后,您是否获得了更多信息?@robmayoff no.应用程序崩溃的时间比我得到的任何有用的调试信息都要早。我也有同样的问题。你是怎么做到的?对于我的应用程序,我有NSTextView,当我在其中放置长文本时,它会崩溃。不幸的是,我无法关闭自动布局。我有几百个XIB。而且我无法完全更新应用程序:(另外,没有让你了解核心动画。莫哈韦强制使用CA意味着什么?如果我使用[[window contentView]SetWantLayer:YES]启用核心动画,我重复的重新显示问题就会消失。如果我不启用核心动画,苹果会记录奇怪的消息“错误:该窗口已标记为需要另一个显示窗口过程,但它已经有3个显示窗口过程。”此外,我注意到Mojave窗口被绘制在CATTransaction内部,而不是旧的[window DisplayIfRequired]路径。My-(NSRect)splitView:(NSSplitView*)splitView effectiveRect:(NSRect)建议的提取影响系数:(NSRect)分割指数提取影响系数:(NSInteger)dividerIndex被无限调用。你是如何解决这个问题的???我和Mojave有着完全相同的问题和相同的错误消息,还有与SplitView的委托非常相似的无限循环。你是如何解决这个问题的?结果是我在drawRect:dirtyRect中更新了Mojave暗模式的颜色,这导致了无限循环-(无效)布局。我删除了那个代码,因为我不需要它,这就解决了它。