2012-07-27 44 views
1

福利局上下的iOS開發者在這裏的數組創建數組...如何從陣列

我有一個包含一個屬性,它是一個自定義類的一個對象的viewController。我們將調用該自定義類ClassA。 ClassA的對象有一個屬性,它是另一個我們稱之爲ClassB的自定義類的對象的NSMutableArray。 ClassB具有屬性,該屬性也是CLLocation類型的對象的NSMutableArray。

從viewController中的方法中,我需要創建一個CLLocationCoordinate2D結構的C數組(CLLocationCoordinate2D是CLLocation的一個屬性)。每個CLLocationCoordinate2D都需要來自ClassB和ClassA中所有對象所擁有的所有CLLocation對象。如果我理解我已經做了什麼,我相信我有一個3D陣列。

我被困在究竟如何去組裝這個數組結構。如果只是一個數組,我會做這樣的事情:

NSUInteger numberOfSteps = [objectOfClassX count];  
CLLocationCoordinate2D coordinates[numberOfSteps]; 

for (NSInteger index = 0; index < numberOfSteps; index++) { 
    CLLocation *location = [objectOfClassX objectAtIndex:index]; 
    CLLocationCoordinate2D coordinate = location.coordinate; 

    coordinates[index] = coordinate; 
} 

但是我與得到的每個對象的第一陣列中的語法掙扎,那裏面每個對象第二陣列中,那麼這裏面CLLocationCoordinate2D。

任何幫助表示讚賞。

感謝,
ñ

回答

2

迭代一次得到座標的總數,然後再重複,以將它們複製到新分配的數組。

NSInteger coordCount = 0, coordIndex = 0; 
for(ClassA *a in collectionOfA) 
    for(ClassB *b in a.collectionOfB) 
     coordCount += [b.locations count]; 

CLLocationCoordinate2D coords[coordCount]; 

for(ClassA *a in collectionOfA) 
    for(ClassB *b in a.collectionOfB) 
    for(CLLocation *location in b.locations) 
     coords[coordIndex++] = location.coordinate; 
+0

注意,如果你想真正的數組存儲在一個實例變量,或別的地方,你需要使用'CLLocationCoordinate2D * COORDS =的malloc(coordCount *的sizeof(CLLocationCoordinate2D))'代替,並且手動'隨後釋放內存,因爲上面顯示的數組在堆棧上分配,並且如果其包含的作用域結束,它將消失。 – warrenm 2012-07-27 03:44:19

+0

這是完美的,謝謝!並且也非常感謝數組持久性提示 - 我不會發現這一點。 – Nick 2012-07-27 14:32:18

-1

只是有一個嘗試:coordinates = [NSMutableArray arrayWithArray: objectOfClassX];