我有一个UITableViewCell,并希望将自定义对象绑定到它。我知道的唯一选择是创建一个自定义单元格,如:
MyCustomCell *cell = [[MyCustomCell alloc] initWithFrame:<SomeFrame>];
customCell.myProperty = someObject;
我很想知道Objective C是否提供了其他方法来代替创建customCell。
在阅读时,我点击了此文档NSObject valueForUndefinedKey:
我尝试了以下操作,应用程序崩溃了。
UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:<SomeFrame>];
[cell setValue:someObject forUndefinedKey:@"SomeObject"];
崩溃日志显示:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UITableViewCell 0x5a846c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key SomeObject.'
请帮助我。
答案 0 :(得分:3)
正如文档中所说,The default implementation raises an NSUndefinedKeyException.
。如果要使用它,则必须覆盖自定义类中的方法。
此外,不要向{cell} bind
任何内容,这意味着不会在单元格对象中保留外部对象。首先,这是打破MVC模式。其次,你最有可能遇到细胞重用问题。
答案 1 :(得分:3)
在CustomCell nib的界面构建器中,将File's Owner自定义类设置为CustomCell类时会发生此问题。
文件的所有者自定义类应始终设置为UITableViewCell。 应将表视图对象自定义类设置为CustomCell类。 示例(NotificationCell是我的自定义单元类):
答案 2 :(得分:2)
您可以使用associated objects来避免子类化。至于setValue:forKey:
和setValue:forUndefinedKey:
,请查看头文件(NSKeyValueCoding.h)以获取详细信息。