我有一组地图注释,我正在迭代以存储到我自己的数据模型中。我已经检查了日志语句,以确保坐标实际上是不同的,它们是。但是,当我尝试迭代相同的引脚数组并将坐标添加到我的模型时,所有坐标都完全相同。
我知道我的循环是罪魁祸首,但无法弄清楚为什么会发生这种情况:
NSMutableArray *modelArray = [NSMutableArray new];
for (PinObject *currentPin in self.mapPins) {
CLLocation *pinCoordinate = [[CLLocation alloc] initWithLatitude:currentPin.coordinate.latitude longitude:currentPin.coordinate.longitude];
AnnotationCameraModel *cameraModel = [self.cameraModel initWithData:pinCoordinate];
coordinates[i] = currentPin.coordinate;
[modelArray addObject:cameraModel];
}
for (AnnotationCameraModel *model in modelArray) {
NSLog(@"Coordinate: %@", model.coordinate);
}
当我记录我的观点时,我最终得到:
Coordinate: <+14.56841634,+121.03354250> +/- 0.00m (speed -1.00 mps / course -1.00) @ 11/17/16, 9:00:14 PM Philippine Standard Time
Coordinate: <+14.56841634,+121.03354250> +/- 0.00m (speed -1.00 mps / course -1.00) @ 11/17/16, 9:00:14 PM Philippine Standard Time
Coordinate: <+14.56841634,+121.03354250> +/- 0.00m (speed -1.00 mps / course -1.00) @ 11/17/16, 9:00:14 PM Philippine Standard Time
有什么想法吗?
答案 0 :(得分:3)
除非self.cameraModel
(持有此代码的对象的属性)是某种工厂对象,它使用方法AnnotationCameraModel
生成initWithData:
个对象,否则您的问题就在于:
AnnotationCameraModel *cameraModel = [self.cameraModel initWithData:pinCoordinate];
我怀疑这个属性只是一个简单的AnnotationCameraModel
对象,它的初始化程序(取决于它的编写方式)会自行返回。
将该行更改为:
AnnotationCameraModel *cameraModel = [[AnnotationCameraModel alloc] initWithData:pinCoordinate];
行coordinates[i] = currentPin.coordinate;
也没有多大意义。您可能想要coordinates[i++] = currentPin.coordinate;
答案 1 :(得分:3)
应该有两部分创作
1 - alloc
2 - init
您基本上是在初始化已初始化的对象。
在每个init方法中都会有一个检查
if (self == nil)
{
self = [super init];
}
return self;
所以基本上
[self.cameraModel initWithData:pinCoordinate]
只会返回self
,因为它不是nil
。
这样做
AnnotationCameraModel *cameraModel = [[AnnotationCameraModel alloc]initWithData:pinCoordinate];