2016-03-15 2 views
2

Я написал пользовательский вид xib в swift. Вид отображается правильно, и @IBAction также прав. Но когда я добавлю @IBOutlet, приложение выйдет из строя.Крушение IBOutlet

Сообщение об ошибке:

2016-03-15 22:32:16.650 ****[42692:1015001] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7f8ea483cd30> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key cancelBtn.' 

И XIB:

XIB Information

И код:

class PYChangeNameView: UIView { 
    var confirmAction: ((name: String?) ->())? 
    var cancelAction: (() ->())? 

    @IBOutlet weak var cancelBtn: UIButton! 

    private init() { 
    super.init(frame: CGRectZero) 
    if let view = UIView.loadFromNibNamed("PYChangeNameView") {  
    view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
    self.frame = UIScreen.mainScreen().bounds self.addSubview(view) 
    } 
    } 

    @IBAction func cancelClick(sender: AnyObject) { 
    PYCNVStaticValues.sharedInstance?.removeFromSuperview() 
    PYCNVStaticValues.cancelAction?() 
    } 
} 

В @IBAction работает, но @IBOutlet не Работа. }

+0

ли кнопка на самом деле называется «cancelBtn» в XIb? Основываясь на имени действия и сообщении об ошибке, я бы предположил, что он называется «cancel». –

+0

Вы можете видеть изображение, кнопка называется «cancelBtn». –

+0

Вы добавили IBOutlet к этой кнопке в любом другом месте? –

ответ

3

Посмотрите на ошибку: это говорит вам, что NSObject не имеет поля cancelBtn. И почему?

Глядя на ваш скриншот, я вижу, что у вас есть розетка cancelBtn на вашем File's Owner. (Выход должен быть установлен на любой Ваш заказ вид.)

Поэтому я могу сделать вывод, что ваш объект File's Owner не получает должным образом связан с PYChangeNameView, и среда выполнения думает, что это просто NSObject. Я считаю, что вам нужно установить этот класс как тип вашего XIB - вероятно, в элементах управления справа.

Заканчивать этот красивый скриншот Retina качества, которые я захватил:

Beautiful Screenshot at Retina Quality

Там также может быть необходимо установить модуль поле. Вы можете получить некоторое представление от this answer.

+0

Я думаю, что вы правы, я (медленно) пришел к такому же выводу, просто нужно быть уверенным :-) – pbodsk

+0

@QED Как я могу получить правильное отношение к PYChangeNameView? –

+0

@PlutoY Я добавил красивый скриншот качества Retina, чтобы показать вам, как это сделать. – QED

0

проверка, чтобы убедиться, что ваш взгляд xib-х является PYChangeNameView

like This

+0

И это было сказано ** Модуль **, на самом деле есть нечто иное, чем ** Нет ** –

+0

Конечно, это! –

+0

Ваш модуль должен быть вашим именем проекта. не «none» –

Смежные вопросы