如何获取对象的文本值?

时间:2009-11-01 18:52:41

标签: objective-c text object

如何获取对象的文本值以便在表格中显示?其他帖子说对象不是NSStrings,你需要询问对象的文本。但是怎么样?错误是这样的:

  

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [Names isEqualToString:]:无法识别的选择器发送到实例0xf51b60'

对于Objective-C中的代码

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

我向所有高级程序员致歉,我是新手,并且在NSObject文档中找不到答案。感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用-description方法获取任何对象的字符串值,类似于Java中的toString()。许多类也响应-stringValue方法。

但是,-description主要用于调试目的。如果您发布的代码不起作用,则表示namesArray包含NSString个实例以外的内容,在这种情况下,您需要找出数组中的对象类型;你不能只是将一个对象强制转换为NSString。

答案 1 :(得分:2)

我觉得到目前为止的答案都没有提到问题的重点。您的错误是Names类没有实现isEqualToString:方法。这被称为(大概),因为如果字符串与显示的字符串不同,UITableViewCell仅更改其text的{​​{1}},并且正在使用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; 。在几个Cocoa对象上使用-stringValue来返回它们所持有的数据的字符串表示形式,例如-stringValueNSNumber(Mac)等。

编辑:

Peter Hosey在this StackOverflow.com问题中非常巧妙地回答了这个问题。

答案 2 :(得分:0)

如果要显示具有NSLog()"%@"格式的对象,则invoqued方法为-(NSString*) description(如果存在)。您有责任为自己的课程编写此方法。