2009-11-01 108 views
0

如何获取对象的文本值以便将其显示在表中?其他职位说对象不是NSString,你需要问对象的文本。但是如何?该错误是这样的:如何获取对象的文本值?

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

此代码在Objective-C:

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

我对不住你先进的编程人员,我在这个新的和无法要么找到NSObject的文档中的答案。谢谢。

+0

对象的类型是什么?对象没有规范的“文本价值”,因此多种方法可能适合该法案。一个常见的是'-stringValue'。 – outis 2009-11-01 18:57:14

+0

另一个是'-description'。 – outis 2009-11-01 18:58:23

+0

@outis:不,常见的是'-description',它在'NSObject'中实现,并且通常会覆盖哪些类。它返回一个字符串。 – jbrennan 2009-11-01 18:59:46

回答

0

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

+0

谢谢。将尝试并看看会发生什么。 – Doug 2009-11-09 03:29:30

3

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

但是,-description主要用于调试目的。如果您发布的代码不起作用,那意味着namesArray包含NSString实例以外的其他内容,在这种情况下,您需要了解阵列中的对象类型;你不能只将一个对象投射到NSString。

+0

最初,代码在代码中有字符串名称时起作用,并且它们在表格中正确显示。但是我现在已经删除了字符串名称,并试图在用户输入名称的地方使用CoreData,它们被保存,提取并显示在表格中。是的,namesArray应该包含字符串,所以也许它的CoreData问题还没有工作,或者我需要一个stringValue方法。 – Doug 2009-11-09 03:16:35

+0

根据错误消息,您有一个名为“Names”的类,您将其视为字符串,因此会出现错误。 – Darren 2009-11-09 19:00:13

2

我觉得迄今为止的答案都没有提到这个问题。您的错误是说Names类不执行isEqualToString:方法。这被称为(推测是),因为UITableViewCell只改变其textLabeltext,如果该字符串与正在显示的字符串不同,并且它使用isEqualToString:执行此比较,因为cell.textLabel.textNSString属性。

但是,你没有给它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)等

编辑:

彼得Hosey在this StackOverflow.com很巧妙地回答了这个问题询问题。

+0

在发布之前,我确实看到了Peter Hosey的回答。非常类似的情况,但当他的回答是“向对象索取文本”时,我被绊倒了。我会尝试你的建议为-stringValue方法,看看是否有效。谢谢。另见我对达伦的回应;这用于在我专门定义字符串时工作,但现在我试图改用CoreData。 – Doug 2009-11-09 03:28:28