2013-08-29 40 views
2
NSMutableArray *experienceValues; 
experienceValues = [NSMutableArray alloc] initWithObjects:0,83,174,276,nil]; 

NSLog(@"%@", [experienceValues objectAtIndex:3]); 

为什么这总是抛出-[__NSArrayM objectAtIndex:]: index 3 beyond bounds for empty array当它被明确分配并初始化之前的行?的NSMutableArray总是空

+1

你的问题已经得到了很好的回答,但你没有收到第2行的任何警告或错误? – colincameron

+0

首先,为什么不让第1行和第2行成为一行?其次,在[[NSMutableArray all ...]之前的第二行中缺少'['',最后在每个整数之前需要'@'。 – Popeye

回答

3

您需要包装像@0, @83, @174, ...这样的整数值,因为原始整数不是对象。

+1

完美,正是我在寻找的。 – DuskFall

1

Objective-C集合类只能存储对象;不像int这样的原始图形。

您需要将它们包装在NSNumber对象中。

如果这些是字面值,那么@Kirsteins提供的答案将演示语法。

2

该数组是空的,因为参数是零终止的,0被解释为零。

该数组应该只包含对象(而不是像int这样的基元)。在你的情况下,你应该为所有的数字创建NSNumbers。你可以用数字文字语法@2.0来做到这一点。

1

试试这个

NSMutableArray *experienceValues = [[NSMutableArray alloc] initWithObjects:@0,@83,@174,@276,......., nil]; 

NSLog(@"%d", [experienceValues objectAtIndex:3]); 

由于initWithObjects:只接受对象,你需要把唯一的对象是

+1

我认为@ 0(NSNumber)会比@“0”(NSString)更好 –

+0

感谢您的建议和是的,它肯定会更好:) –

3

的NSMutableArray里类如可可大部分的集合类,只接受对象。所以,如果你想放的数字,你不能把原始类型,但NSNumber类的实例只是,这样的:

[[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInt:0]...etc 

或用文字:

[[NSMutableArray alloc] initWithObjects:@0,@83,@174,@276.. etc 
+0

辉煌,谢谢,但我无法接受任何8分钟的答案 – DuskFall

+1

没什么大不了的,欢迎你。我还想指出的是,当你获得价值时,你会得到一个NSnumber对象,所以你不能对它进行“数学运算”。所以[[experienceValues objectAtIndex:3] intValue]将返回正确的原始类型。 – Andrea

+1

备注:'@ 0,@ 83'是“NSNumber文字”。 “下标”是例如'array [0]'或'dict [@“key”]'。 –

1

你要加入整数值给NSArray。

NSMutableArray *experienceValues = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:42],nil]; 

然后将其转换回整数一样,

NSLog(@"%@", [experienceValues objectAtIndex:0]); 
+1

在这里你添加的字符串,而不是NSNumber文字 – colincameron

+0

@ c.cam108..yes,那不是理想的方式做..我同意你和做apolozige旧方法添加字符串,然后将其转换为整数...所以编辑答案.. –