NSMutableArray 项完全相同

NSMutableArray items are all exactly the same

我有一组地图注释,我正在迭代这些注释以将其存储到我自己的数据模型中。我检查了日志语句以确保坐标实际上不同,它们确实不同。但是,当我尝试遍历相同的引脚数组并将坐标添加到我的模型时,所有坐标都完全相同。

我知道我的循环是罪魁祸首,但不太明白为什么会这样:

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

有什么想法吗?

除非self.cameraModel(持有此代码的对象的属性)是某种使用方法initWithData: 生成AnnotationCameraModel 对象的工厂对象,你的问题在于行:

AnnotationCameraModel *cameraModel = [self.cameraModel initWithData:pinCoordinate];

我怀疑这个 属性 只是一个简单的 AnnotationCameraModel 对象和它的初始值设定项(取决于它的编写方式)returns 本身。

将该行更改为:

AnnotationCameraModel *cameraModel = [[AnnotationCameraModel alloc] initWithData:pinCoordinate];

coordinates[i] = currentPin.coordinate;也没有多大意义。你可能想要coordinates[i++] = currentPin.coordinate;

的东西

应该有两部分创作

1 -  alloc 
2 -  init

你基本上是在初始化一个已经初始化的对象。

在每个初始化方法中都会有一个检查

if (self == nil)
{
self = [super init];
}
return self;

所以基本上

[self.cameraModel initWithData:pinCoordinate]

除了返回 self 什么都不做,因为它不是 nil.

这样做

 AnnotationCameraModel *cameraModel = [[AnnotationCameraModel alloc]initWithData:pinCoordinate];