我有一个带有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
}
我在这里做错了什么?
答案 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中进行类型转换是我存在的祸根。我希望这有助于某人!