我用 xib 用 swift 编写了一个自定义 View 。 View 显示正确,@IBAction
也是正确的。但是当我添加 @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:
代码是:
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
无效。
}
最佳答案
看一下错误:它告诉您 NSObject
没有 cancelBtn
字段。为什么会这样?
查看您的屏幕截图,我可以看到您在文件所有者
上设置了cancelBtn
socket 。 ( socket 应设置为您的自定义 View 。)
因此我可以得出结论,您的 File's Owner
对象没有与您的 PYChangeNameView
正确关联,并且运行时认为它只是一个 NSObject
>。我相信您需要将该类设置为 XIB 中的类型 - 可能在右侧的控件中。
看看我拍摄的这张漂亮的视网膜质量屏幕截图:
可能还需要设置模块字段。您可以从this answer获得一些见解.
关于ios - IBOutlet 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36014433/