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インスタンスが作成されてセットに追加された後にインスタンスのプロパティを変更しない場合は、そのクラスのメソッドhashisEqual:メソッドをオーバーライドして、ここで探している動作を取得できます。

NSSetこれら 2 つのメソッドを使用してオブジェクトをテストします。オブジェクト自体の同一性ではなくisEqual:、オブジェクトに含まれる値を比較するように再定義すると、セットはそれらを等しいと見なします。MapAnnontation

于 2012-06-21T18:49:23.880 に答える
1

新しいオブジェクトを作成しているため、それは新しいため、明らかにセットに含まれていません。

代わりに、セット内の各オブジェクトをチェックして、それが新しいオブジェクトと等しいかどうかを確認する必要があります。

于 2012-06-21T18:42:42.383 に答える