为什么我不能访问我的 NSMutableArray 的元素?

Why can't I access the elements of my NSMutableArray?

我在我的界面中将数组 a、b、c 和 d 声明为属性 class 并像这样初始化它们:

[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);

但是当我打印这个 returns 时,它不是我期望的值。我还得到一个“不兼容的指针,指向整数转换初始化 'NSInteger'(又名 'long'),表达式类型为 'id'。

另外,如果有人能解释一下 'long' 是什么,那就太好了。

您不会将整数或 NSInteger 放入数组中,而是将对象(即 NSNumber.

的实例)放入数组中
NSNumber *number = patternA[3];
long a = number.longValue;

会给你正确的值。

这称为装箱/拆箱 - 将普通值放入对象中。因此,您转储的内容或多或少是包含对象的地址。

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

a long 可以容纳比 int 更大的数字,但也会占用更多的内存字节 http://code.tutsplus.com/tutorials/objective-c-succinctly-data-types--mobile-21986