Как получить текстовое значение объекта? - PullRequest
0 голосов
/ 01 ноября 2009

Как получить текстовое значение объекта, чтобы отобразить его в таблице? Другие сообщения говорят, что объекты не являются NSStrings, и вам нужно спросить объект для его текста. Но как? Ошибка такая:

* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «* - [Names isEqualToString:]: нераспознанный селектор, отправленный экземпляру 0xf51b60 '

для этого кода в Objective-C:

NSString *cellValue = [namesArray objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
return cell;

Приношу свои извинения всем продвинутым программистам, я новичок в этом и не смог найти ответ в документации по NSObject. Спасибо.

Ответы [ 3 ]

3 голосов
/ 01 ноября 2009

Вы можете использовать метод -description для получения строкового значения любого объекта, аналогичного toString() в Java. Многие классы также отвечают на метод -stringValue.

Однако -description используется главным образом для целей отладки. Если опубликованный вами код не работает, это означает, что namesArray содержит что-то отличное от NSString экземпляров, и в этом случае вам нужно будет выяснить, какие объекты находятся в вашем массиве; вы не можете просто привести объект к NSString.

2 голосов
/ 01 ноября 2009

Я чувствую, что ответы до сих пор упускают суть вопроса. Ваша ошибка говорит о том, что класс 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 вопросе.

0 голосов
/ 01 ноября 2009

Если вы хотите отобразить объект с NSLog() и форматом "%@", то метод invoqued имеет значение -(NSString*) description, если он существует. Вы несете ответственность за написание этого метода для своих собственных классов.

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