如何像SKNode一样编辑NSArray对象

时间:2014-05-05 09:33:27

标签: ios objective-c nsarray sprite-kit

-(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的指针,那为什么它告诉我它没有属性叫做位置?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

当您从NSArray获取特定索引处的对象时,它始终返回类型为id的对象,这意味着它不包含任何类相关信息。

尝试以下代码

id object = _arrayOfChunks[0]

if([object isKindOfClass [SKNode class]])
{
   [(SKNode *)object setPosition:CGPointMake(screenSizeHalfW, screenSizeHalfH-100)];
}

这应该可以消除错误。

我们进行检查以确保所访问的对象实际上是SKNode类型,只是确保如果将来将其他类型的对象添加到数组中,我们就不会出现异常。