NSSet containsObject Not Working?

99封情书 提交于 2019-12-25 05:08:09

问题


I am trying to check if the annotation exists before adding it to array. I can't figure out why [visibleAnnotations containsObject:annotation] always returns 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];
            }

Zoomed to only show 1 annotation.

 Annotation in Rect {(<MapAnnotation: 0x1cd80720>)}
 New Annotation <MapAnnotation: 0x1cd79410>

Thanks


回答1:


If you never change the properties of your MapAnnotation instances once they are created and added to the set, you could override the hash and isEqual: methods for that class to get the behavior you're looking for here.

NSSet uses those two methods to test objects; if you redefine isEqual: to compare the values contained in the MapAnnontation objects, rather than the identity of the objects themselves, the set will take them to be equal.




回答2:


Because you are creating a new object, and because it is new, it clearly is not in your set.

You need to check each object in the set to see if it is equal to your new object instead.



来源:https://stackoverflow.com/questions/11144616/nsset-containsobject-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!