【问题标题】:How to get the text value of an object?如何获取对象的文本值?
【发布时间】:2009-11-01 18:52:41
【问题描述】:

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

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

Objective-C 中的这段代码:

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

我向所有高级程序员道歉,我是新手,也无法在 NSObject 文档中找到答案。谢谢。

【问题讨论】:

  • 对象的类型是什么?对象没有规范的“文本值”,因此可能需要多种方法。一个常见的是-stringValue
  • @outis: 不,常见的是-description,它在NSObject 中实现,并且通常会覆盖哪些类。它返回一个字符串。
  • @jbrennan:我不是说了吗?
  • @outis 是的,但直到我发表了我的评论(意思是你在我回答的时候发表了)。

标签: objective-c text object


【解决方案1】:

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

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

【讨论】:

  • 最初,当我在代码中包含字符串名称并且它们在表格中正确显示时,代码才起作用。但是我现在已经删除了字符串名称,并尝试在用户输入名称的地方使用 CoreData,它们被保存、获取,然后显示在表中。是的,namesArray 应该包含字符串,所以它可能是一个尚未工作的 CoreData 问题,或者我需要一个 stringValue 方法。
  • 根据错误消息,您有一个名为“Names”的类,您将其视为字符串,因此出现错误。
【解决方案2】:

我觉得到目前为止的答案都没有抓住问题的重点。您的错误是说 Names 类没有实现 isEqualToString: 方法。这被称为(大概)因为UITableViewCell 仅在字符串与显示的字符串不同时更改其textLabeltext,并且它使用isEqualToString: 执行此比较,因为cell.textLabel.text 是@ 987654329@财产。

但是,您没有给它一个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 用于多个 Cocoa 对象,以返回它们所持有的数据的字符串表示形式,例如 NSNumberNSCell (Mac) 等。

编辑:

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

【讨论】:

  • 在发帖之前,我确实看到了 Peter Hosey 的回答。非常相似的情况,但是当他的回答是“向对象询问其文本”时,我被绊倒了。我会尝试您对 -stringValue 方法的建议,看看是否可行。谢谢。另请参阅我对达伦的回复;当我专门定义字符串时,这曾经可以工作,但现在我尝试使用 CoreData。
【解决方案3】:

当你想以NSLog()"%@" 格式显示对象时,调用的方法是-(NSString*) description(如果存在)。您有责任为自己的类编写此方法。

【讨论】:

  • 谢谢。会尝试看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2015-11-02
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多