【发布时间】:2016-07-01 01:53:36
【问题描述】:
我在 swift 中通过 xib 编写了一个自定义视图。视图显示正确,@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 无效。
}
【问题讨论】:
-
这个按钮在xib中真的被命名为“cancelBtn”吗?根据动作名称和错误消息,我猜它被命名为“取消”。
-
可以看到图片,按钮名为“cancelBtn”。
-
您是否在其他任何地方为该按钮添加了 IBOutlet?
-
@HugoAlonso 不,我在项目中搜索了键“cancelBtn”,只有这个地方。
-
说
NSObject...setValue:forUndefinedKey:而不是UIViewController...setValue:forUndefinedKey:是不是很有趣。您的文件所有者是什么样的?