0

我试图在将注释添加到数组之前检查它是否存在。我不明白为什么 [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>

谢谢

4

2 回答 2

3

MapAnnotation如果您在创建实例并将其添加到集合后从不更改实例的属性,则可以覆盖该类的hashandisEqual:方法以获得您在此处寻找的行为。

NSSet使用这两种方法来测试对象;如果您重新定义isEqual:以比较MapAnnontation对象中包含的值,而不是对象本身的标识,则集合会将它们视为相等。

于 2012-06-21T18:49:23.880 回答
1

因为您正在创建一个新对象,并且因为它是新对象,所以它显然不在您的集合中。

您需要检查集合中的每个对象,以查看它是否与您的新对象相等。

于 2012-06-21T18:42:42.383 回答