【问题标题】:discussing functionality of id's stringValue function?讨论 id 的 stringValue 函数的功能?
【发布时间】:2013-02-08 16:26:33
【问题描述】:

我得到了一个具有 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 字符串安全代码。

总结:
想通过几行代码sn-ps了解stringValue的用途

【问题讨论】:

  • NSString *v0 = [ ... intValue]没问题???
  • 输入错误。问题已更正。它是 int *v0
  • 又打错了;这是int 不是int *

标签: objective-c nsmutablearray


【解决方案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 表示尝试将字符串转换为纯C int 值。

【讨论】:

    【解决方案2】:

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

    你建议的方法是正确的:

    NSString *v0 = [arrayObj objectAtIndex:0];
    

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

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

    【讨论】:

    • 所以我的意思是:stringValue 到底是什么?我不是在寻找解决方案。而是要了解 stringValue 功能
    • @N.Ramos stringValue在一些UI控件中用于从控件中提取字符串或者在控件中设置字符串。
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2021-08-05
    • 2011-06-11
    • 2021-08-10
    • 2012-09-06
    相关资源
    最近更新 更多