为什么我无法访问NSMutableArray的元素?

时间:2015-06-13 09:57:24

标签: objective-c indexing nsmutablearray

我在我的接口类中将数组a,b,c和d声明为属性,并将它们初始化为:

[self setPatternA:[[NSMutableArray init] initWithArray:@[@0,@0,@1,@1,@2,@2]]];
[self setPatternB:[[NSMutableArray init] initWithArray:@[@3,@4,@4,@5,@5,@3]]];
[self setPatternC:[[NSMutableArray init] initWithArray:@[@3,@3,@4,@4,@5,@5]]];
[self setPatternD:[[NSMutableArray init] initWithArray:@[@0,@1,@1,@2,@2,@0]]];

现在我正试图像这样访问它们:

NSInteger a=[patternA objectAtIndex:3];
NSLog(@"pattern a: %ld", (long)a);

但是当我打印出它返回的内容时,它并不是我所期望的价值。我也得到一个“不兼容的指向整数转换的指针,初始化'NSInteger'(又名'long'),表达式为'id'。

另外,如果有人可以解释什么是“长”,那就太好了。

2 个答案:

答案 0 :(得分:1)

您不会将整数或NSInteger s放入数组中,而是放置对象,即NSNumber的实例。

NSNumber *number = patternA[3];
long a = number.longValue;

会给你正确的价值。

这称为装箱/拆箱 - 将普通值放入对象中。所以你倾销的东西或多或少是包含对象的地址。

答案 1 :(得分:0)

您的数组包含NSNumber - @1NSNumber文字。 http://clang.llvm.org/docs/ObjectiveCLiterals.html

long可以包含比int更大的数字,但在内存中占用更多字节http://code.tutsplus.com/tutorials/objective-c-succinctly-data-types--mobile-21986