報(bào)錯(cuò)信息:
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key button.'
這個(gè)報(bào)錯(cuò)由桌,大部分時(shí)候適合XIB的拖線有關(guān)。
解決方案
1盆赤、找到出錯(cuò)的 key,就是報(bào)錯(cuò)的控件。 清除控件與對(duì)應(yīng)的UIView文件的關(guān)聯(lián)。
這里的出錯(cuò)是比較常見(jiàn)的跟继,拖線錯(cuò)誤,或者之前拖線正確,后來(lái)修改outlet的名字都會(huì)導(dǎo)致報(bào)錯(cuò)奢入。
所以,要認(rèn)真檢查一下敲霍。
2俊马、查看你的 outlet 狀態(tài)
圖1.png
圖2.png
file‘owner 和 xib 的view 都有一個(gè) customView 屬性。 兩個(gè)都需要設(shè)置么肩杈?
答:一般必須要設(shè)置 xib 的view 的customView(這樣才能保證連線正確柴我,比如上圖1,我的customView就是HeadView 扩然。有一個(gè)button和一個(gè)label 艘儒。)。
files'owner 可以不設(shè)置。
如果不小心把files'owner 的customView也設(shè)置成了HeadView 界睁。一定要注意觉增,圖2 的outlet 不可用。
否則翻斟,還是會(huì)報(bào)錯(cuò)逾礁。
總之:不要誤把customView 設(shè)置到file's owner 上面,而是必須設(shè)置到 xib 的 customView 上访惜。
另外:自定義view 的 xib 的使用注意
1> 如果一個(gè)view從xib中加載,就不能用[xxx alloc] init] 和 [xxx alloc] initWithFrame:]創(chuàng)建
2> 如果一個(gè)xib經(jīng)常被使用,應(yīng)該提供快速構(gòu)造類方法
3> 如果一個(gè)view從xib中加載:
用代碼添加一些子控件,得在 initWithCoder: 和 awakeFromNib 創(chuàng)建
4> 如果一個(gè)view從xib中加載,會(huì)調(diào)用initWithCoder: 和 awakeFromNib,不會(huì)調(diào)用init和initWithFrame:方法
(因?yàn)閤ib 最終會(huì)轉(zhuǎn)化成 代碼嘹履。所以不會(huì)調(diào)用。Init 和 initWithFrame)