UITableViewCell - setValue: forUndefinedKey: - PullRequest
3 голосов
/ 14 февраля 2012

У меня есть UITableViewCell и я хочу привязать к нему пользовательский объект. Единственный известный мне вариант - создать собственную ячейку, например:

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

Мне любопытно узнать, предоставляет ли Objective C какой-либо другой способ сделать это вместо создания настраиваемой ячейки.

Во время чтения я попал в этот документ Значение NSObjectForUndefinedKey:

Я попробовал следующее, и приложение упало.

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 ]

3 голосов
/ 21 марта 2012

Эта проблема возникает, когда в построителе интерфейса для кончика CustomCell пользовательский класс владельца файла установлен на ваш класс CustomCell.

Пользовательский класс владельца файла должен быть всегда установлен UITableViewCell. Пользовательский класс объекта табличного представления должен быть установлен в ваш класс CustomCell. Пример (NotificationCell - мой пользовательский класс ячеек): enter image description here

3 голосов
/ 14 февраля 2012

Как сказано в документах, The default implementation raises an NSUndefinedKeyException..Вам придется переопределить метод в вашем пользовательском классе, если вы хотите его использовать.

Кроме того, не bind ничего для ячеек, это означает, что нет никаких внешних объектов внутри объектов ячеек.Во-первых, это разрушает схему MVC.Во-вторых, у вас, скорее всего, возникнут проблемы с повторным использованием ячеек.

2 голосов
/ 14 февраля 2012

Вы можете использовать связанные объекты , чтобы избежать создания подклассов. Что касается setValue:forKey: и setValue:forUndefinedKey:, посмотрите подробности в заголовочном файле (NSKeyValueCoding.h).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...