2012-08-01 53 views
4

所以我有一个NSArray中与具有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 
} 

我究竟该数组迭代在这里做错了吗?

回答

15

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

+0

我以为%@是一个通配符,所以我可以传递任何东西 – 2012-08-01 03:56:41

+4

您可以传递任何对象,但正如我所说的,int不是一个对象。 – sosborn 2012-08-01 03:57:22

+0

谢谢,这有助于澄清和错误。有一个DOH! (打耳光)时刻 – 2012-08-01 03:58:17

0

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

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

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

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