【问题标题】:Get Integer value from NSNumber in NSArray从 NSArray 中的 NSNumber 获取整数值
【发布时间】:2012-08-01 03:48:06
【问题描述】:

我有一个 NSArray,其中 NSNumber 对象具有 int 值:

arrayOfValues = [[[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:5], [NSNumber numberWithInt:6], [NSNumber numberWithInt:7], nil] autorelease];
[arrayOfValues retain];

我正在尝试像这样遍历数组:

int currentValue;
for (int i = 0; i < [arrayOfValues count]; i++)
{
    currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue];
    NSLog(@"currentValue: %@", currentValue); // EXE_BAD_ACCESS
}

我在这里做错了什么?

【问题讨论】:

    标签: objective-c ios iterator nsarray nsnumber


    【解决方案1】:

    您使用了错误的格式说明符。 %@ 用于对象,但 int 不是对象。所以,你应该这样做:

    int currentValue;
    for (int i = 0; i < [arrayOfValues count]; i++)
    {
        currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue];
        NSLog(@"currentValue: %d", currentValue); // EXE_BAD_ACCESS
    }
    

    更多信息in the docs

    【讨论】:

    • 我认为 %@ 是一张通配符,所以我可以通过任何东西
    • 你可以传递任何对象,但就像我说的,int 不是对象。
    • 谢谢,这确实有助于澄清和错误。有一个 DOH! (拍拍头)瞬间
    【解决方案2】:

    在创建我想调用的枚举值的 NSArray 时,这对我有用(知道这是正确的解决方案很有用)我正在使用 Xcode 6.4。

    int currentValue = (int)[(NSNumber *)[arrayOfValues objectAtIndex:i] integerValue];
    

    sosborn 的回答会引发警告,因为仍然需要将 NSInteger 转换为 int。

    ObjC 中的类型转换是我存在的祸根。我希望这对某人有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多