ClLocationCoordinate2D的NSMutableArray

时间:2011-02-23 18:29:43

标签: iphone ios4

我正在尝试创建然后检索CLLocationCoordinate2D对象的数组,但由于某种原因,该数组始终为空。

我有:

NSMutableArray *currentlyDisplayedTowers;
CLLocationCoordinate2D new_coordinate = { currentTowerLocation.latitude, currentTowerLocation.longitude };
[currentlyDisplayedTowers addObject:[NSData dataWithBytes:&new_coordinate length:sizeof(new_coordinate)] ];

我也尝试过添加数据:

[currentlyDisplayedTowers addObject:[NSValue value:&new_coordinate withObjCType:@encode(struct CLLocationCoordinate2D)] ];

无论哪种方式,[currentDisplayedTowers count]总是返回零。什么想法可能会出错?

谢谢!

5 个答案:

答案 0 :(得分:49)

要留在对象中,您可以创建CLLocation的实例并将其添加到可变数组中。

CLLocation *towerLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lon];
[currentDisplayedTowers addObject:towerLocation];

要从CLLocationCoordinate返回CLLocation结构,请在对象上调用coordinate

CLLocationCoordinate2D coord = [[currentDisplayedTowers lastObject] coordinate];

答案 1 :(得分:3)

正如SB所说,确保您的阵列已分配并初始化。

您可能还想在第二个代码段中使用NSValue换行。然后解码就像:

NSValue *wrappedCoordinates = [currentlyDisplayedTowers lastObject]; // or whatever object you wish to grab
CLLocationCoordinate2D coordinates;
[wrappedCoordinates getValue:&coordinates];

答案 2 :(得分:1)

您需要分配数组。

NSMutableArray* currentlyDisplayedTowers = [[NSMutableArray alloc] init];

然后你可以使用它。完成后请务必致电释放或使用其他工厂方法。

答案 3 :(得分:1)

我有currentlyDisplayedTowers = nil导致所有问题。此外,以前的init和alloc建议是必要的。谢谢大家的帮助!

答案 4 :(得分:0)

对于有此问题的其他人,如果您计划使用MapKit,还有另一种解决方案。

(当然,我之所以说 IF ,是因为仅仅为了方便的包装方法而导入MapKit这样的模块可能不是最好的举动..但是尽管如此,你走了。)

@import MapKit;

然后在需要时使用MapKit的坐标值包装器:

[coordinateArray addObject:[NSValue valueWithMKCoordinate:coordinateToAdd]];

在你的例子中..

[currentlyDisplayedTowers addObject:[NSValue valueWithMKCoordinate:new_coordinate]];