2012-07-27 42 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];