0

我得到了一个具有 int 值的 NSMutableArray 对象,我可以通过以下方式获得某个值:

int *v0=[[[arrayObj objectAtIndex:0] intValue];

没有问题。

但是我得到了一个带有 NSString 值的 NSMutableArray 对象,我无法通过以下方式获得某个值:

NSString *v0=[[[arrayObj objectAtIndex:0] stringValue];
//raises error

我想了解并准确了解 stringValue 的用途...以及为什么会发生此错误?

NSString *v0=[arrayObj objectAtIndex:0]; 按预期工作。我假设它的某种指针以空终止,因此它可以获取值。我不确定这一行也是 unicode/encoded 字符串安全代码。

总之:
想通过一些代码片段来了解 stringValue 的用途

4

2 回答 2

1

我有一个具有 int 值的 NSMutableArray 对象

这是不可能的,Cocoa 数组总是包含对象。您可能有一个包含NSNumber整数的对象数组,例如:

NSArray *arrayOfNumbers = @[@1, @2, @3];

NSNumber对象有一个intValue方法,所以这有效:

int value = [arrayOfNumbers[0] intValue];

另一方面,当你有一个字符串数组时......

NSArray *arrayOfStrings = @[@"1", @"2", @"3"];

...您想直接访问单个元素,而不是将字符串对象转换为其他对象:

NSString *element = arrayOfStrings[0];

NSString对象不理解的stringValue方法:

[arrayOfStrings[0] stringValue]; // crash: does not recognize selector

回到开头,我们NSNumber第一个数组中的对象确实理解stringValue. 您可以使用它将数字转换为字符串:

NSString *intString = [arrayOfNumbers[0] stringValue];

为了使混乱完美,NSString 还要理解以下intValue消息:

int value = [arrayOfStrings[0] intValue];

这里intValue的意思是尝试将字符串转换为纯 Cint值。

于 2013-02-08T16:53:46.290 回答
1

您将得到的错误(但未能发布您的问题)将是Unknown selector sent to instance,这是因为NSString没有stringValue方法。

您建议的方法是正确的:

NSString *v0 = [arrayObj objectAtIndex:0];

编辑(由@Answerbot 的回答提示):

您感到困惑的原因[NSString intValue]是用于将字符串值转换为整数,只要字符串表示整数(即@"123")。但是你不需要这个字符串,因为对象已经是一个字符串。因此不提供。

于 2013-02-08T16:32:12.173 回答