Objective-C:访问阵列中的成员对象?!?我认为

时间:2010-07-11 16:33:56

标签: objective-c

Obj-C的新手,所以感谢耐心。 :P

因为我是初学者,所以我将使用汽车示例。我更容易理解。

我有一个物体,汽车。它有两个成员对象,轮胎和发动机。

轮胎和引擎也有自己的成员变量,但它们只是具有各种名称的int(如pressure,treadDepth)。

在所有这些情况下,我都合成了访问器方法。我不确定对象的访问器方法,所以我只是做了@property id engine / @property id tire。希望是对的!

现在,我可以执行dot.notation样式来访问:[car.engine cylinders]。精细!发送轮胎和引擎消息工作正常。我写方法,这种符号似乎有用。

但是当我为汽车宣布一系列像4轮胎这样的物体时:

@interface Car : NSObject {
     tire *tires[4];
}

我无法像这样发送消息

[car.tire[0] setPressure: int];

它说访问未知轮胎吸气剂的方法。

基本上我想知道是否有人可以帮助我理解如何正确访问数组中对象的成员变量。

谢谢!

4 个答案:

答案 0 :(得分:2)

您正试图在car上调用不存在的getter。无论如何,你不能按值返回C风格的数组,所以在这种情况下我不是只返回Tire*指针而是使用NSArray

// header:
@interface Car : NSObject {
    NSArray *tires;
}
@property (nonatomic, copy) tires;
// ...

// source:
@implementation Car
@synthesize tires;

- (id)init {
    if ((self = [super init])) {
        tires = [[NSArray alloc] initWithObjects:
                  [[[Tire alloc] init] autorelease],
                  // ...
                  nil];
        // ...
    }
    return self;
}

- (void)dealloc {
    [tires release]; // don't forget to clean up
    // ...
}

现在你可以使用getter:

[[[car.tires] objectAtIndex:0] setPressure:0];

答案 1 :(得分:0)

啊,好的。哎呀!

需要编写索引访问者。那不是@synthesize交易的一部分吗?噢,伙计!

:P

答案 2 :(得分:0)

为什么不将所有tire个对象放入NSArrayNSSet?或者,由于您知道只有四个,因此您只需定义frontLeftTirefrontRightTire等属性。

答案 3 :(得分:0)

您可以使用Objective-C样式数组。然后你会有类似的东西:

NSArray *tires = [NSArray arrayWithObjects: tire1, tire2, tire3, tire4];

然后你可以访问它们:

[tires objectAtIndex:0];

假设您正在使用所描述的合成方法。我不确定你的问题,但似乎你可能想要为这些对象定义一个“轮胎”(而不仅仅是一个方法,这是我在上面看到的),它继承自NSObject,或者来自你自己的然后你在一个循环中分配4个轮胎,并调用一个设置一些默认状态的init方法(希望比我车里的备用圆环更好),然后将它们添加到你的阵列中“Car”当你初始化汽车时。