6

我有一个 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
}

我在这里做错了什么?

4

2 回答 2

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
}

文档中的更多信息。

于 2012-08-01T03:54:12.047 回答
1

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

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

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

ObjC 中的类型转换是我存在的祸根。我希望这可以帮助别人!

于 2015-08-07T16:27:20.320 回答