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];
我有一组地图注释,我正在迭代这些注释以将其存储到我自己的数据模型中。我检查了日志语句以确保坐标实际上不同,它们确实不同。但是,当我尝试遍历相同的引脚数组并将坐标添加到我的模型时,所有坐标都完全相同。
我知道我的循环是罪魁祸首,但不太明白为什么会这样:
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];