Я, вероятно, просто что-то пропустил, но для жизни меня не могу понять.swift: неожиданно найдено нуль при разворачивании необязательного значения в awakeFromNib()
Я работаю над приложением с структурой MVC; Я помещаю все необходимые поля на XIb, но я полагаюсь на View, чтобы реально изменить шрифт, размер и т.д.
Вот мой код:
import Foundation
import UIKit
protocol ProductionWellChemistryFormTwoViewDelegate {
}
class ProductionWellChemistryFormTwoView: BaseUIView {
let fontSizeL : CGFloat = 18
let fontName : String = "Futura"
var delegate : ProductionWellChemistryFormTwoViewDelegate!
@IBOutlet weak var labelTitle: UILabel!
@IBOutlet weak var labelFieldCode: UILabel!
@IBOutlet weak var labelGasFlaskNo: UILabel!
@IBOutlet weak var labelDatePrepared: UILabel!
@IBOutlet weak var labelDateVacuumed: UILabel!
@IBOutlet weak var labelClickingSound: UILabel!
@IBOutlet weak var labelTimeStarted: UILabel!
@IBOutlet weak var labelTimeFinished: UILabel!
@IBOutlet weak var labelWHPStarted: UILabel!
@IBOutlet weak var labelWHPEnded: UILabel!
@IBOutlet weak var labelSPPStarted: UILabel!
@IBOutlet weak var labelSPPEnded: UILabel!
@IBOutlet weak var labelSPStarted: UILabel!
@IBOutlet weak var labelSPEnded: UILabel!
@IBOutlet weak var labelRemarks: UILabel!
@IBOutlet weak var textfieldFieldCode: UITextField!
@IBOutlet weak var textfieldGasFlaskNo: UITextField!
@IBOutlet weak var textfieldDatePrepared: UITextField!
@IBOutlet weak var textfieldDateVacuumed: UITextField!
@IBOutlet weak var textfieldTimeStarted: UITextField!
@IBOutlet weak var textfieldTimeFinished: UITextField!
@IBOutlet weak var textfieldWHPStarted: UITextField!
@IBOutlet weak var textfieldWHPEnded: UITextField!
@IBOutlet weak var textfieldSPPStarted: UITextField!
@IBOutlet weak var textfieldSPPEnded: UITextField!
@IBOutlet weak var textfieldSPStarted: UITextField!
@IBOutlet weak var textfieldSPEnded: UITextField!
@IBOutlet weak var textviewRemarks: UITextView!
@IBOutlet weak var switchClickSound: UISwitch!
override func awakeFromNib() {
self.labelTitle.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelFieldCode.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelGasFlaskNo.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelDatePrepared.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelDateVacuumed.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelClickingSound.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelTimeStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelTimeFinished.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelWHPStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelWHPEnded.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelSPPStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelSPPEnded.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelSPStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelSPEnded.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.labelRemarks.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldFieldCode.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldGasFlaskNo.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldDatePrepared.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldDateVacuumed.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldTimeStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldTimeFinished.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldWHPStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldWHPEnded.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldSPPStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldSPPEnded.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldSPStarted.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textfieldSPEnded.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textviewRemarks.font = UIFont(name: self.fontName, size: self.fontSizeL)
self.textviewRemarks.layer.borderWidth = 1.0
self.textviewRemarks.layer.borderColor = UIColor.blackColor().CGColor
self.textviewRemarks.text = ""
}
}
код бросает исключение, когда я прочитал первый строка awakeFromNib()
, что бы это ни было (я пробовал комментировать первую строку, так что он перешел ко второму).
Я сделал это примерно в полтора десятка раз, поэтому я действительно не уверен, что происходит. Единственное, что я могу думать о том, что я сделал по-другому, - это попытаться исправить предыдущий Unknown class in Interface Builder file
, перейдя в исходный код Xib и переименовав класс ProductionWellChemistryFormTwoViewer
, ошибочно названный класс, который я тогда переименовал в мой класс (без предыдущего представления).
Приложение запускается, если я отключу все внутри awakeFromNib()
.
EDIT: Приложение также работает хорошо, шрифты и все, если изменить следующую строку в исходном XIB код:
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vYc-5l-gfD" userLabel="ContentView" customClass="ProductionWellChemistryFormTwoView" customModule="Integra_Geochemistry" customModuleProvider="target">
Назад:
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vYc-5l-gfD" userLabel="ContentView" customClass="ProductionWellChemistryFormTwoViewer" customModule="Integra_Geochemistry" customModuleProvider="target">
я получаю ошибку Unknown class _TtC20Integra_Geochemistry36ProductionWellChemistryFormTwoViewer in Interface Builder file.
, но по крайней мере он работает.
Я расширить на ситуацию я уже упоминал выше, вот что случилось:
- Я создал XIB.
- Я создал вид, ошибочно названный
ProductionWellChemistryFormTwoViewer
- Установите класс XIB в указанный вид.
- Обнаружено о неправильном названии.
- Изменено имя
ProductionWellChemistryFormTwoView
. Некоторые ошибки всплывают. - Вручную сменила любую ссылку на
ProductionWellChemistryFormTwoViewer
наProductionWellChemistryFormTwoView
. - Заметил, что приложение запускает ошибку
unknown class
, отправляется в источник XIB, удаляетсяProductionWellChemistryFormTwoViewer
. - THEN Я получил ошибки выше.
О, gadd, это какой-то неудобный код прямо там ... – LinusGeffarth
Я думаю, вы должны добавить еще несколько IBOutlets ...(/ сарказм), но со всей серьезностью я бы рекомендовал вам применить новый подход к реализации этого, это адский кошмар на данный момент. Вероятно, вы должны использовать IBOutletCollections. – Hamish
Прежде всего, это довольно неэффективно для создания десятков одного и того же экземпляра 'UIFont'. Проверьте, является ли шрифт 'nil'. – vadian