UITableViewCell - setValue: forUndefinedKey:

3

我有一个UITableViewCell,想要将自定义对象绑定到它上面。我所知道的唯一选项是创建自定义的cell,例如:

MyCustomCell *cell = [[MyCustomCell alloc] initWithFrame:<SomeFrame>];
customCell.myProperty = someObject;

我想知道Objective C是否提供了其他方法来完成这个任务,而不是创建一个自定义单元格。

在阅读过程中,我遇到了这篇文档 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.'

请帮我解决这个问题。

3个回答

4
在CustomCell nib的界面构建器中,当文件所有者自定义类被设置为CustomCell类时,会出现这个问题。
文件所有者自定义类应该始终设置为UITableViewCell。 表视图对象自定义类应该设置为你的CustomCell类。 例如(NotificationCell是我的自定义单元格类): enter image description here

2
错误。文件的所有者自定义类应始终设置为 NSObject - Philip007

3

如文档所述,默认实现会引发NSUndefinedKeyException异常。如果您想使用它,必须在自定义类中覆盖该方法。

此外,请不要将任何内容绑定(bind)到单元格上,这意味着不要在单元格对象中保留外部对象。首先,这会破坏MVC模式。其次,您很可能会遇到单元格重用的问题。


1
感谢您提供MVC建议。然而,重写方法并没有解决问题。我仍然收到NSUndefinedKeyException异常。 - Sahil Khanna

2

您可以使用关联对象来避免子类化。至于setValue:forKey:setValue:forUndefinedKey:,请查看头文件(NSKeyValueCoding.h)中的详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接