跟进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/

10-12 04:29