Ios 检查MKPolyline覆盖是否已存在
如何检查多段线是否已添加到地图 我尝试了以下代码,但似乎不起作用Ios 检查MKPolyline覆盖是否已存在,ios,mkmapview,mkoverlay,mkpolyline,Ios,Mkmapview,Mkoverlay,Mkpolyline,如何检查多段线是否已添加到地图 我尝试了以下代码,但似乎不起作用 for (MKPolyline *feature1 in self.mapView.overlays) { NSLog(@"feature1.title: %@", feature1.title); NSLog(@"Polu.title: %@", polu.title); if (![feature1.title isEqualToString:polu.title]) {
for (MKPolyline *feature1 in self.mapView.overlays) {
NSLog(@"feature1.title: %@", feature1.title);
NSLog(@"Polu.title: %@", polu.title);
if (![feature1.title isEqualToString:polu.title]) {
NSLog(@"NOT");
[self.mapView addOverlay:polu];
}
else {
NSLog(@"Already added");
}
}
}
我也试过:
if (![self.mapView.overlays containsObject:polu]) {
NSLog(@"NOT");
[self.mapView addOverlay:polu];
}
当前的
for
循环假设该覆盖存在或不存在,只要它找到另一个标题不匹配的覆盖
但此时,for循环的可能没有检查剩余的覆盖(其中一个可能是您正在查找的覆盖)
例如:
- 假设地图上已经有4个标题为A、B、C和D的覆盖图
- 假设要检查的覆盖(
polu
)的标题为C
- 检查的第一个覆盖是A。由于A与C不匹配,现有代码立即添加另一个名为C的覆盖
- 然后
for
循环继续并查看B。同样,由于B与C不匹配,现有代码添加了另一个名为C的覆盖
- 然后循环继续,查看C,并记录“已添加”
- 然后循环继续,查看D,发现它与C不匹配,并添加另一个覆盖
相反,您希望在找到匹配的标题时停止循环,如果循环结束时未找到匹配项,则添加覆盖
例如:
BOOL poluExists = NO;
for (MKPolyline *feature1 in self.mapView.overlays) {
NSLog(@"feature1.title: %@", feature1.title);
NSLog(@"Polu.title: %@", polu.title);
//STOP looping if titles MATCH...
if ([feature1.title isEqualToString:polu.title]) {
poluExists = YES;
break;
}
}
//AFTER the loop, we know whether polu.title exists or not.
//If it existed, loop would have been stopped and we come here.
//If it didn't exist, loop would have checked all overlays and we come here.
if (poluExists) {
NSLog(@"Already added");
}
else {
NSLog(@"NOT");
[self.mapView addOverlay:polu];
}
在问题的第二个示例中,containsObject:
仅在polu
是第一次调用addOverlay
时给出的原始对象时才起作用,因为在这种情况下,containsObject:
将比较指针地址,而不是覆盖的title
属性。对于for循环,在决定是否添加覆盖之前,是否应该检查所有覆盖?现在,它根据第一次叠加的结果来决定。第二次尝试可能不起作用,因为polu
不是添加的原始对象。您能帮我修复for方法吗?我是否应该将覆盖的数组与self.mapview.overlays中的数组进行比较?