NSMutableArray项目都完全相同

时间:2016-11-17 13:09:22

标签: ios objective-c nsmutablearray

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

我知道我的循环是罪魁祸首,但无法弄清楚为什么会发生这种情况:

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

有什么想法吗?

2 个答案:

答案 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];