Новые ошибки автоматического компоновки с Xcode 8.1

У меня есть приложение 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 для отладки. Эта ошибка будет зарегистрирована только один раз.

Открытый диалог затем останавливается и не может быть отклонен.

Как было предложено, я установил myPopup.runModal() останова для 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 не помечает какие-либо проблемы с автопоставкой в базовом представлении.

Может кто-нибудь объяснить, что может происходить и/или стратегия дальнейшей отладки? Мой опыт ограничен, и я сбит с толку.

Ответы

Ответ 1

Проверьте иерархию представлений в конструкторе интерфейсов. Возможно, textField находится поверх всего, и Xcode пытается установить для него ограничения. В противном случае, возможно, добавьте несколько скриншотов того, что происходит в ваших раскадровках. Вы пытались установить textField в вопросе ширины и высоты от = до> = установленного значения? В прошлом у меня были проблемы, когда такая глупая настройка сортировала ошибку, подобную этой.