跟进this question。
我有一个应用程序,主视图有一个按钮,一个文件“弹出.xb”,它现在是空的(只是一个视图,没有按钮,没有标签,没有任何东西)。我想当我按下按钮时它会弹出。出于某种原因,每当我按下按钮时,就会出现以下错误:
... 此类不符合密钥视图的密钥值编码
我读到这是因为NIB中的outlet被删除或更改了,所以我删除了所有对象以及显示空视图的内容。但我还是有这个错误。
我的代码:
视图控制器.swift
import UIKit
class ViewController: UIViewController {
@IBAction func showPopup(sender: AnyObject) {
var x = UINib(nibName: "Popup", bundle: nil);
println(x)
var y = x.instantiateWithOwner(nil, options: nil)
println(y)
var z = y[0] as? PopupViewController
println(z)
z!.show(self.view)
}
}
PopupViewController.swift
import UIKit
class PopupViewController : UIViewController {
func show(tView : UIView) {
tView.addSubview(self.view)
self.view.backgroundColor = UIColor.redColor()
}
}
输出:
<UINib: 0x7ff822412f90>
2015-02-02 15:47:57.870 tttt[5437:179808] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7ff822553ec0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'
*** First throw call stack:
更新
更新2
我继续根据答案和评论调整内容,如果我这样做了,就可以执行这行代码。但随后我得到一个包含UIView的数组,而不是UIViewController。因此,最后一行
var y = x.instantiateWithOwner(PopupViewController(), options: nil)
会导致崩溃。我知道它创建了正确的nib,因为我更改的属性(例如alpha值)正确地出现在z!.show(self.view)
的文本输出中。所以我现在的问题是:作为所有者,我应该将什么传递到
println(y)
? 最佳答案
检查作为文件所有者的类。这个错误似乎是说,它试图将.XIB中的视图链接到一个普通的NSObject
,当然,它没有视图属性。
如果不希望所有者链接到视图,请确保没有视图出口。还验证文件的所有者是否是一个真正存在的对象类型。
关于ios - 当我尝试实例化UINib时,我得到:此类对于键 View 不兼容键值编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28279401/