ios - 如何像 SKNode 一样编辑 NSArray 对象

标签 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);

我得到一个错误

在“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/

相关文章:

ios - 使用核心数据访问检索到的托管对象中的数据

iOS 7 : Misplaced View Frame for "Label - Label" will be different at run time

ios - 是否可以为 Swift 或 Objective-C 中的对象提供更多内存?

objective-c - 如何处理存储属性的集合并快速获取

ios - 更改导航栏中自动创建的按钮上的文本

nsarray - 如何使用字典取消嵌套数组

javascript - 使用 SafeAreaView 时在 iOS 上 react native ScrollView 抽搐

ios - 使用 Swift 将 JSON 或 CSV 数据导入 Firestore

ios - 如何在 iOS6 中的 Core Data 中保存和检索两个数组

objective-c - 类方法的常量 NSDictionary/NSArray