-(NSArray*)createArrayOfChunks{
ProceduralMapGeneration *procedure = [[ProceduralMapGeneration alloc]init];
[procedure initArrays];
NSMutableArray *arrayMutable = [[NSMutableArray alloc] init];
SKNode *object;
for (int i = 0; i <= 19; i++) {
object = [procedure createChunk];
[arrayMutable addObject:object];
}
NSArray *array = [arrayMutable copy];
return array;
}
如果我创建一个这样的数组,然后在另一个方法中调用该方法
_arrayOfChunks = [self createArrayOfChunks];
但现在我要修改_arrayOfChunks[0].position
当我尝试这样做时
_arrayOfChunks[0].position = CGPointMake(screenSizeHalfW, screenSizeHalfH-100);
我收到错误
Property 'position' not found on object of type 'id'
现在正如你之前看到的那样,当我使用它createArrayOfChunks:
时,实例变量object
这是一个指向SKNode
的指针,那为什么它告诉我它没有属性叫做位置?我该如何解决这个问题?
答案 0 :(得分:2)
当您从NSArray获取特定索引处的对象时,它始终返回类型为id
的对象,这意味着它不包含任何类相关信息。
尝试以下代码
id object = _arrayOfChunks[0]
if([object isKindOfClass [SKNode class]])
{
[(SKNode *)object setPosition:CGPointMake(screenSizeHalfW, screenSizeHalfH-100)];
}
这应该可以消除错误。
我们进行检查以确保所访问的对象实际上是SKNode类型,只是确保如果将来将其他类型的对象添加到数组中,我们就不会出现异常。