2

菜鸟问题在这里。

如果我有一个带有数组 float itemsPosition[20][20] 的 A 类并且我有另一个 B 类可以访问它,我该怎么做?

我通常这样做是为了分配 A 类并访问其他对象,但在这种情况下,我无法在 A 类中合成浮点数组。

有任何想法吗?

4

2 回答 2

1

浮点数是 C 类型,因此您不能使用典型的 Objective C 属性来直接访问它们。

最好的办法是创建一个“访问器”函数,让 B 类可以访问第一个数组条目“ itemsPosition”的指针。例如“ itemsPosition[0][0]

在 A 类的 .h 文件中:

float itemsPosition[20][20];

- (float *) getItemsPosition;

在 .m 文件中:

- (float *) getItemsPosition
{
    // return the location of the first item in the itemsPosition 
    // multidimensional array, a.k.a. itemsPosition[0][0]
    return( &itemsPosition[0][0] );
}

在 B 类中,由于你知道这个多维数组的大小是 20 x 20,你可以很容易地找到下一个数组条目的位置:

    float * itemsPosition = [classA getItemsPosition];
    for(int index = 0; index < 20; index++)
    {
        // this takes us to to the start of itemPosition[index]
        float * itemsPositionAIndex = itemsPosition+(index*20);

        for( int index2 = 0; index2 < 20; index2++)
        {
            float aFloat = *(itemsPositionAIndex+index2);
            NSLog( @"float %d + %d is %4.2f", index, index2, aFloat);
        }
    }
}

让我知道在某个地方为您放置一个示例 Xcode 项目是否对我有用。

于 2012-10-01T04:42:13.993 回答
1

您可以保存指向您的数组的指针@synthesizeNSValue

@interface SomeObject : NSObject
@property (strong, nonatomic) NSValue *itemsPosition;
@end

@implementation SomeObject
@synthesize itemsPosition;
...
static float anArray[20][20];
...
- (void) someMethod
{
    ... add items to the array
    [self setItemsPosition:[NSValue valueWithPointer:anArray]];
}
@end

@implementation SomeOtherObject
...
- (void) someOtherMethod
{
    SomeObject *obj = [[SomeObject alloc] init];
    ...
    float (*ary2)[20] = (float(*)[20])[obj.itemsPosition pointerValue];
    ...
}
于 2012-10-01T04:43:10.973 回答