-(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);
我得到一个错误
在“id”类型的对象上找不到属性“position”
现在正如您之前看到的那样,当我使用 createArrayOfChunks:
时,它生成了实例变量 object
,它是指向 SKNode
的指针,那为什么会这样告诉我它没有位置属性?我该如何解决这个问题?
最佳答案
当您从 NSArray 获取特定索引处的对象时,它总是返回 id
类型的对象,这意味着它不包含任何与类相关的信息。
试试下面的代码
id object = _arrayOfChunks[0]
if([object isKindOfClass [SKNode class]])
{
[(SKNode *)object setPosition:CGPointMake(screenSizeHalfW, screenSizeHalfH-100)];
}
这应该消除错误。
我们进行检查以确保访问的对象实际上是 SKNode 类型,只是确保如果将来其他类型的对象添加到数组中我们不会得到异常。
关于ios - 如何像 SKNode 一样编辑 NSArray 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23469199/