Xcode 8.1出现新的自动布局错误

36

我有一个macOS应用程序,在升级到Xcode 8.1之前一直运行良好。

该应用程序使用NSOpenPanel打开对话框,以允许用户选择图像。当我选择图像并选择“打开”时,会出现以下错误:

2016-11-03 10:23:25.589283 PA Places Data[9008:265214] [Layout]检测到NSTextField丢失的约束条件:0x6000001e3a00。由于没有足够的约束条件来完全定义尺寸和原点,因此无法放置它。添加缺失的约束条件或将translatesAutoresizingMaskIntoConstraints设置为YES,系统将为您生成约束条件。如果在macOS 10.12及更高版本上手动布局此视图,则可以选择不从覆盖中调用[super layout]。请在DETECTED_MISSING_CONSTRAINTS上设置断点以进行调试。此错误仅记录一次。

然后打开的对话框会冻结,无法解除。

按照建议,我为DETECTED_MISSING_CONSTRAINTS设置了断点,并发现代码中的myPopup.runModal()停止执行:

func happyAlert(message: String, info: String) {
    let myPopup: NSAlert = NSAlert()
    myPopup.messageText = message
    myPopup.informativeText = info
    myPopup.alertStyle = NSAlertStyle.informational
    myPopup.addButton(withTitle: "OK")
    myPopup.runModal()
}

这个警报通知用户,图像是否通过了各种验证检查。

以前发生的情况是,选择图像后,NSOpenPanel关闭,然后警报出现且没有任何问题。

现在我遇到了关于NSTextField约束的错误,但我不明白为什么它们会涉及到这里,特别是因为Xcode没有标记底层视图中的任何自动布局问题。

有人能解释一下可能发生了什么和/或进一步调试的策略吗?我的经验有限,我感到困惑。


3
经过进一步搜索,看起来这个问题可能与我升级的操作系统10.12有关,但我之前没有注意到。http://openradar.appspot.com/28700495 - Peter Wiley
5
这里也发生了一个NSAlert的错误:2016年12月19日19:53:32.717529 TreeTest[1668:47124] [布局]检测到NSTextField:0x6080001e0900缺少约束条件。由于没有足够的约束条件来完全定义大小和位置,因此无法放置它。添加缺少的约束条件,或将translatesAutoresizingMaskIntoConstraints设置为YES,系统会为您生成约束条件。如果在 macOS 10.12 及更高版本上手动布局此视图,则可以选择不从覆盖中调用[super layout]。请在DETECTED_MISSING_CONSTRAINTS上设置断点以进行调试。这个错误只会记录一次。 - Mike97
我曾经遇到过同样的问题,但它与打开对话框无关。确保你的问题也不是这个原因。 - Coder-256
@PeterWiley 你试过锚点吗? - Eddwin Paz
myPopUp.translatesAutoresizingMaskIntoConstraints = true - Eddwin Paz
1个回答

1
请检查接口生成器中的视图层次结构,可能是textField位于所有内容的顶部,Xcode正在尝试为其设置约束。否则,可以在storyboards中添加一些屏幕截图以了解情况。 您是否尝试将相关textField的宽度和高度从=设置为> =设置的值?过去我曾遇到过这样的问题,这种愚蠢的设置已经解决了类似于这个问题的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接