setValue:forUndefinedKey this class is not key value coding-

來源:互聯網
上載者:User

下午開發過程中遇到一個錯誤,結果被的真慘,從上午 11 點查錯一直查到下午 2 點才找到錯誤的原因,真的鬱悶的不行。

關於查錯這麼久,主要的原因是: 

1. 自己對 IOS 開發還不熟悉
2. 不知道怎麼得到錯誤的詳細資料, 連調出來 All Output 面板查看錯誤資訊都不知道,真的差勁
3. 有錯誤資訊後應該直接去 stackoverflow 找答案。應為 IOS 開發中文方面的資料和分享實在太少,出錯就要直接上 stackoverflow.

 下面說錯誤,錯誤的詳細資料: 

2013-07-12 15:49:43.476 MyPad[15944:f803] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<BenefitItemsTableCell 0x6d9bdd0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key.'
*** First throw call stack:
(0x1490022 0x127fcd6 0x148fee1 0xd90022 0xd01f6b 0xd01edb 0x420c88 0xd1cd50 0x60471a 0x1491dea 0x13fb7f1 0x60326e 0x475230 0xd886e94 0x65ea1 0x47cc54 0x47d3ce 0x468cbd 0x4776f1 0x420d42 0x1491e42 0x23e679 0x248579 0x1cd4f7 0x1cf3f6 0x25c160 0x3e0e84 0x3e1767 0x3f0183 0x3f0c38 0x3e4634 0x2329ef5 0x1464195 0x13c8ff2 0x13c78da 0x13c6d84 0x13c6c9b 0x3e0c65 0x3e2626 0x1a0ad 0x2535)
terminate called throwing an exception(lldb) 


其中出錯的代碼在:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath * NSString *CellIdentifier =     MyTableCell *cell =(MyTableCell*

 




關於這個奇怪的錯誤,在 stackoverflow 找到了這樣的解釋:


There are a couple of options to resolve this - i'll let you decide which is the most appropriate.


The reason it's failing is because the owner is being passed as nil. You're binding the actionText outlet to the file's owner in IB, but then when loading the nib, the owner is nil. I'd guess that when loading with a nil owner behind the scenes an NSObject is used, which is why you're getting the key/value error.


My previous advice to pass the cell as the owner would also fail as I didn't know how the Nib is constructed; the cell is nil as you've yet to create it (and dequeue is passing nil back, so even pass cell as the owner is still essentially passing nil).


Two options:


Instantiate a new cell in your -cellForRowAtIndexPath:(NSIndexPath *)indexPath implementation, and pass that new cell as the owner (but i'd guess that this isn't the best solution for you)
Or, and I'd suggest this is the better solution, change the binding of actionText in your nib file to the Alert Cell and not the file's owner (You have File's Owner and an Alert Cell - bind the UILabel to the actionText outlet of the Alert Cell, and not the File's owner, which is what's being done at present) - I suspect this is what you want. With that in mind file's owner can become an NSObject again.
------- Original answer kept below as the file's owner class is also a common cause for this error -------


It suggests that you've 'instantiated' an AlertCell in InterfaceBuilder, and you're binding something to actiontext, but the class isn't set to AlertCell, it's still NSObject?


Take a look at the class text box on the identify tab of the tool palette for that object in Interface Builder. The class should be AlertCell, but i'd guess it's still set to NSObject.


As an aside, and feel free to ignore this advice, but there are a couple of extra things i'd encourage you to do, purely from an Objective C expectations/conventions point of view:


Name your files after your class (upper case the first character of the filename).
Prefix your class names; two uppercase characters, typically your initials (i'd name it DWAlertCell, for example).










相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.