如何获取对象的文本值以便在表格中显示?其他帖子说对象不是NSStrings,你需要询问对象的文本。但是怎么样?错误是这样的:
对于Objective-C中的代码*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [Names isEqualToString:]:无法识别的选择器发送到实例0xf51b60'
:
NSString *cellValue = [namesArray objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
return cell;
我向所有高级程序员致歉,我是新手,并且在NSObject文档中找不到答案。感谢。
答案 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
来返回它们所持有的数据的字符串表示形式,例如-stringValue
,NSNumber
(Mac)等。
编辑:
Peter Hosey在this StackOverflow.com问题中非常巧妙地回答了这个问题。
答案 2 :(得分:0)
如果要显示具有NSLog()
和"%@"
格式的对象,则invoqued方法为-(NSString*) description
(如果存在)。您有责任为自己的课程编写此方法。