将一组NSObject指针存储在C数组中

时间:2013-03-27 19:24:10

标签: objective-c c arrays

我想创建一个包含几个成员变量的NSObject子类:

@interface PointMass : NSObject
{
    CGPoint mCurPosition;
    CGPoint mLastPosition;
    CGPoint mAcceleration;
}

-(id) initWithPosition:(CGPoint*) pos;


#import "PointMass.h"

@implementation PointMass

-(id) initWithPosition:(CGPoint*)pos
{
    mCurPosition = *pos;
    mLastPosition = *pos;
    mAcceleration = ccp(0,0);
    return self;
}

@end

我想创建一个C风格的数组来在cocos2d类中保存它们:

// mNumPoint declared in interface, I've set it to 100
PointMass *pointMassList;
pointMassList = malloc(sizeof(PointMass*) * mNumPointMass);

for (int = 0; i < mNumPointMass; i++)
{
    CGPoint point = ccp(100,100);
    PointMass *p = [[PointMass alloc] initWithPosition: &point];
    pointMassList[i] = p;
}

但是我收到了错误

Expected method to write array element not found on object of type 'PointMass *'

如果我想在C数组中存储指向它的指针,是否需要告诉编译器更多关于我的PointMass对象?

我基本上试图在iPhone上玩一些粒子数学,而不需要经常从NSArray解包点,如果我不清楚我想要在这里实现什么。

如果我以一种倒退的方式解决这个问题,我很乐意纠正 - 自从我写了香草C以来,我已经有一段时间了,而且我有点生气了!

1 个答案:

答案 0 :(得分:5)

  

自从我写了香草C以来已经有一段时间

你仍然可以区分指针指向T和指向指针指针 - TTPointMass在这种情况下)。您希望存储PointMass *数组,数组PointMass(您无论如何也无法做到)。因此,将pointMassList的声明更改为

PointMass **pointMassList;

它会起作用。但是,如果您仍在使用Objective-C,为什么不简单地将实例存储到NSArray