EXC_BAD_INSTRUCTION при добавлении ограничения

#swift

#swift

Вопрос:

Мой вид панели мониторинга работал нормально, пока я не попытался удалить раскадровку из проекта. Я создал новую ветку с помощью git и начал удалять раскадровки и столкнулся с этой проблемой. Вот базовая настройка того, как я добираюсь до экрана панели мониторинга.

 // AppDelegate.swift 

window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = MainTabController()
  
 // MainTabController
let dashboard = DashboardViewController()
let dashboardNavController = UINavigationController(rootViewController: dashboard)
dashboardNavController.tabBarItem.title = "Dashboard"
viewControllers  = [dashboardNavController]
  
 // DashboardViewController.swift

import UIKit

class DashboardViewController: UIViewController {
    var dashboardTitle: UILabel {
        let label = UILabel()
        label.text = "Defatul Dashboard Title"
        label.translatesAutoresizingMaskIntoConstraints = false

        return label
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.white
        view.addSubview(dashboardTitle)

        dashboardTitle.topAnchor.constraint(equalTo: view.topAnchor).isActive = true <-- Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    }
}
  

Если я не добавляю ограничение, приложение работает нормально, как только я добавляю ограничение, я получаю ошибку. Есть идеи относительно того, почему?

введите описание изображения здесь

Комментарии:

1. Ваши ограничения выглядят нормально. Вы сделали это: _Нажмите на название проекта в навигаторе проекта, чтобы получить доступ к параметрам. В параметрах вашей цели, в общих> Информация о развертывании. Измените «Main» на «», т. Е. Сделайте его пустым. Также вы можете заглянуть в консоль и посмотреть, есть ли более подробная информация о том, почему происходит сбой. Просто найдите «ограничение», обычно там есть хорошая информация…

2. Я использую Main.storyboard для обработки представлений register / login. Файл AppDelegate проверяет, прошел ли пользователь аутентификацию. Если у них есть, он загружает MainTabController.

3. Вы создаете другую метку каждый раз, когда ссылаетесь dashboardTitle ? Если это то, что происходит, то 2-й не имеет никакого отношения к view .

4. @PhillipMills Нет. Я даже пытался создать ограничение equalToConstant: 100 , но ошибка сохраняется.

5. @PhillipMills Я думаю, что я был. Я не заметил, пока не пропустил, как я определил свойство. Спасибо

Ответ №1:

Проблема в том, что вы создаете новую метку при каждом вызове dashboardTitle . Вам нужно изменить dashboardTitle на:

 lazy var dashboardTitle: UILabel = {
    let label = UILabel()
    label.text = "Defatul Dashboard Title"
    label.translatesAutoresizingMaskIntoConstraints = false

    return label
}()