Все IBOutlets становятся нулевыми после перехода на Xcode 6 Beta 5
Например, в контроллере представления есть свойство
@IBOutlet weak var nameLabel: UILabel!
Это свойство nil
внутри viewWillAppear
и viewDidLoad
, поэтому приложение выходит из строя во время выполнения.
Он отлично работал в Xcode 6 Beta 4. После того, как я перешел на бета-версию 5, он пожаловался на класс контроллера does not implement its superclass required members
. Поэтому я добавил
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
И эта ошибка компилятора исчезла. Однако приложение падает на unexpectedly found nil while unwrapping an Optional value
, потому что это свойство nameLabel
равно nil
, когда я пытаюсь установить его text
.
Я прочитал заметки о выпуске и не смог понять, как исправить эту проблему.
Ответы
Ответ 1
У меня была такая же проблема в Beta5. Это, по-видимому, проблема, когда
init(nibName: nil, bundle: nil)
не сопоставляет nil с именем nibName по умолчанию. Когда я перешел на явное имя nibName, это сработало. В частности, в моем случае, используя новый? Оператор:
override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
// beta5 workaround: replace nil with explicit name of xib file
let nib = nibNameOrNil ?? "MyViewController"
super.init(nibName: nib, bundle: nibBundleOrNil)
// local initialization here
}
заставляло это волшебно работать снова.
Ответ 2
Это временная ошибка. Обходной путь оказывается: объявите контроллер вида таким образом, чтобы переопределить имя, например:
@objc(ViewController) ViewController : UIViewController { // or whatever its name is
См. также: Являются ли контроллеры представлений с файлами nib в ios 8 beta 5?
EDIT Эта ошибка исправлена в iOS 9 beta 4.