2012-10-01 30 views
2

Noob問題在這裏。從另一個類中調用浮點數組

如果我有一個數組浮點itemsPosition [20] [20]的類A,並且我有另一個類B來訪問它,我該怎麼做?

我最常做它的Alloc A類和其他對象,但在這種情況下訪問,我不能A類

任何想法內合成float數組?

+0

爲什麼你不能合成?如何使用setter? – brainray

+0

我想因爲浮動不是物體 –

回答

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]; 
    ... 
} 
+0

+1對你也是...... NSValues是一個非常優雅,非常客觀的C方式來解決這個問題。 –

+0

從來不知道NSValues!大!將試試這個 –

+0

這個工程!但是如果數組是[20] [10]呢? –

1

float是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); 
     } 
    } 
} 

Le請告訴我,將某個示例Xcode項目放在哪裏對我有用。

+0

謝謝!我其實試過這個,但我返回itemsPosition而不是&itemsPosition。會試試這個! –