NSMutableArray始终为空

时间:2013-08-29 11:05:30

标签: iphone ios objective-c cocoa nsmutablearray

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

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

为什么在前一行明确分配和初始化时,它总是抛出-[__NSArrayM objectAtIndex:]: index 3 beyond bounds for empty array

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

NSMutableArray类作为cocoa中的大多数集合类,只接受对象。因此,如果您想要输入数字,则不能放置基本类型,而只能放置NSNumber类的实例,因此:

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

或者使用文字:

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

答案 2 :(得分:2)

数组为空,因为参数为nil终止,0被解释为nil。

数组应该只包含对象(而不是像int这样的基元)。在这种情况下,您应该为所有数字创建NSNumbers。您可以使用数字文字语法@2.0来完成此操作。

答案 3 :(得分:1)

Objective-C集合类只能存储对象;不是像int这样的基元。

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

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

答案 4 :(得分:1)

试试这个

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

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

由于initWithObjects:只接受对象,因此只需要在其中放置对象

答案 5 :(得分:1)

您正在尝试将整数值添加到NSArray。

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

然后将其转换回整数,如

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