我正在尝试创建然后检索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]总是返回零。什么想法可能会出错?
谢谢!
答案 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]];