XIB VC IBOutlet 的错误“不符合编码要求”
Posted
技术标签:
【中文标题】XIB VC IBOutlet 的错误“不符合编码要求”【英文标题】:Error "not coding-compliant" for XIB VC IBOutlet's 【发布时间】:2018-03-21 10:14:52 【问题描述】:*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x101664480> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label.'
当我像这样连接 IBOutlet 时为什么会出现此错误;@IBOutlet weak var label: UILabel!
func viewDidLoad()
super.viewDidLoad()
label.text = "Hello World!"
xib 文件的所有者设置为自定义 UIViewController 类UIViewController + xib 有什么特别之处吗?Connected IBOutlet
忽略import NightNight
Outlets通过UITableView中的这个函数加载VC;func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let topicVCName = UIViewController(nibName: categories[indexPath.section].refName[indexPath.row], bundle: nil)
navigationController?.pushViewController(topicVCName, animated: true)
如果我拿走插座,xib 加载正常,没有错误。 (显然)
【问题讨论】:
你已经破坏了标签参考网点,在xib中查看 请使用inspector再检查 添加店铺图片 按⇧⌘F,输入label
,回车,查看搜索结果并修复问题。
这将我指向文件所有者的出口
【参考方案1】:
答案就在错误信息中:
UIViewController 0x101664480
这证明了故事板中的视图控制器(或者视图控制器本身来自哪里)是一个普通的 UIViewController 而不是 SingleNumberVC。 SingleNumberVC确实有label
属性,但是UIViewController没有!
你说过:
xib 的文件所有者设置为自定义 UIViewController 类
确实如此,否则你根本无法形成出口。但是当代码运行时,视图控制器本身并不是自定义的 UIViewController 类。您没有回答它来自哪里的问题,但我向您保证,无论在哪里,您都会发现您忘记指定 SingleNumberVC。
编辑哦,我明白了,这里是:
let topicVCName = UIViewController(nibName: categories[indexPath.section].refName[indexPath.row], bundle: nil)
在该行中将 UIViewController
更改为 SingleNumberVC
。
【讨论】:
有道理!那么在didSelectRowAt
中,常量“topicVCName”是否应该不是 UIViewController(....) 而应该是 SingleNumberVC(....)? @马特
这也是有道理的。但这只会pushViewController
到SingleNumberVC
,而且我有更多的VC,而不仅仅是SingleNumberVC
...你会怎么做?
我不知道你在说什么。我回答了你提出的问题。我(正确地)告诉了你崩溃意味着什么以及如何让崩溃消失。以上是关于XIB VC IBOutlet 的错误“不符合编码要求”的主要内容,如果未能解决你的问题,请参考以下文章
仅在 iOS 8 中,iOS @IBOutlet 视图全部为零
为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?
如何从 XIB 文件访问 ViewController 中的 IBoutlet
在 .xib 中使用自定义 UIView 作为 IBOutlet