Ios IBOutlet的崩溃
我在swift中编写了xib的自定义视图。视图显示正确,Ios IBOutlet的崩溃,ios,swift,Ios,Swift,我在swift中编写了xib的自定义视图。视图显示正确,@IBAction也正确。但是当我添加一个@IBOutlet,应用程序就会崩溃 错误消息是: 2016-03-15 22:32:16.650 ****[42692:1015001] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7f8ea483cd30> setValue:forUndefi
@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.'
@IBAction
工作,但@IBOutlet
不工作。
}查看错误:它告诉您,
NSObject
没有cancelBtn
字段。为什么会这样
查看您的屏幕截图,我可以看到您在文件的所有者
上设置了cancelBtn
出口。(应将插座设置为自定义视图的任意值。)
因此,我可以得出结论,您的文件的所有者
对象没有与您的PYChangeNameView
正确关联,运行时认为它只是一个NSObject
。我相信您需要将该类设置为XIB中的类型-可能在右侧的控件中
查看我拍摄的这张美丽的视网膜质量屏幕截图:
还可能需要设置模块字段。您可以从中获得一些见解。检查以确保视图的
xib
是PYChangeNameView
xib中的按钮是否实际命名为“cancelBtn”?根据操作名称和错误消息,我猜它名为“cancel”。您可以看到图片,该按钮名为“cancelBtn”。您是否在任何其他位置为该按钮添加了IBOutlet?@HugoAlonso否,我在项目中搜索了“cancelBtn”键,只有这个地方。说的是
NSObject…setValue:forUndefinedKey:
而不是例如UIViewController…setValue:forUndefinedKey:
,这不是很有趣吗。你的文件所有者是什么样子的?我想你是对的,我(慢慢地)得出了相同的结论,只是需要确定:-)@QED我如何才能正确地与PYChangeNameView关联?@PlutoY我添加了一个漂亮的视网膜质量屏幕截图来向你展示。@QED是文件所有者吗?如果是的话,我已经设置好了。@PlutoY它应该是自定义视图中的任何一个。如果它说的是Module,实际上它与Noneya不同,你的Module应该是你的项目名称。不是“无”,您也可以尝试删除您的插座连接并控制将其拖回。@Daniellonard是的,这是我创建oulet的方式。而模块
也是我的项目名称。
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?()
}
}