我想在将注释添加到数组之前检查注释是否存在。 我无法弄清楚为什么[visibleAnnotations containsObject:annotation]总是返回False。
MKMapRect mRect = self.locationView.visibleMapRect;
NSSet *visibleAnnotations =[self.locationView annotationsInMapRect:mRect];
NSLog(@"Annotation in Rect %@",visibleAnnotations);
for(NSArray * obj in JSON){
coordinates.latitude=[[obj valueForKey:@"Latitude"] doubleValue];
coordinates.longitude=[[obj valueForKey:@"Longitude"] doubleValue];
NSString *title=[NSString stringWithFormat:@"%@",[obj valueForKey:@"DeviceId"]];
MapAnnotation *annotation = [[MapAnnotation alloc] initWithTitle:title andCoordinate:coordinates] ;
NSLog(@"New Annotation %@",annotation);
if ([visibleAnnotations containsObject:annotation ]) {
//[addPins addObject:annotation];
NSLog(@"Contains obj");
}
[addPins addObject:annotation];
[annotation release];
}
放大仅显示1个注释。
Annotation in Rect {(<MapAnnotation: 0x1cd80720>)}
New Annotation <MapAnnotation: 0x1cd79410>
由于
答案 0 :(得分:3)
如果您在创建MapAnnotation
实例并将其添加到集合后从未更改它们的属性,则可以覆盖该类的hash
和isEqual:
方法以获取该行为你在这里寻找。
NSSet
使用这两种方法来测试对象;如果重新定义isEqual:
以比较MapAnnontation
个对象中包含的值,而不是对象本身的标识,则该集合将使它们相等。
答案 1 :(得分:1)
因为你正在创建一个新对象,并且因为它是新的,所以它显然不在你的集合中。
您需要检查集合中的每个对象,看它是否等于您的新对象。