从NSArray中的NSNumber获取Integer值

时间:2012-08-01 03:48:07

标签: objective-c ios iterator nsarray nsnumber

我有一个带有int值的NSNumber对象的NSArray:

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
}

我在这里做错了什么?

2 个答案:

答案 0 :(得分:18)

您使用的是错误的格式说明符。 %@用于对象,但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

答案 1 :(得分:0)

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

int currentValue = (int)[(NSNumber *)[arrayOfValues objectAtIndex:i] integerValue];
索伯恩的回答将发出警告,因为仍然需要将NSInteger转换为int。

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