Я чувствую, что ответы до сих пор упускают суть вопроса. Ваша ошибка говорит о том, что класс Names
не реализует метод isEqualToString:
. Это вызывается (предположительно), потому что UITableViewCell
только изменяет text
своего textLabel
, если строка отличается от отображаемой, и выполняет это сравнение, используя isEqualToString:
, потому что cell.textLabel.text
является NSString
собственность.
Однако вы не даете ему NSString
. Вы даете ему Names
объект, поэтому, конечно, он не будет работать. Поскольку Names
, очевидно, является пользовательским объектом, вы должны предоставить метод для извлечения строкового представления из этого объекта, и вы должны явно вызвать этот метод самостоятельно.
Например, вы могли бы реализовать метод с именем -asString
(это было бы ужасное имя, но это для иллюстрации точки), который мог бы выглядеть примерно так:
- (NSString*) asString {
return [NSString stringWithFormat:@"This name is %@", aNameIvar];
}
Вы бы тогда использовали это так:
Name * thisName = [namesArray objectAtIndex:indexPath.row];
cell.textLabel.text = [thisName asString];
return cell;
Правильное имя для этого метода будет -stringValue
. -stringValue
используется для нескольких объектов Какао, чтобы вернуть строковое представление данных, которые они содержат, таких как NSNumber
, NSCell
(Mac) и т. Д.
EDIT:
Питер Хоси довольно точно ответил на этот точный вопрос в этом StackOverflow.com вопросе.