#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
}()