[ios, macos] Hardened std::map usage in MGLMapVIew
Replaced std::map::operator[] usage with std::map::at(). Backed up an assertion on iOS with a guard when -annotationTagsInRect: returns the tag of a nonexistent annotation, for consistency with macOS. Removed an unnecessary and risky subscript into _annotationContextsByAnnotationTag in -positioningRectForCalloutForAnnotationWithTag: on iOS.
This commit is contained in:
committed by
Minh Nguyễn
parent
5bfbe9603b
commit
d39ea23b09
@@ -1452,7 +1452,7 @@ public:
|
||||
}
|
||||
else
|
||||
{
|
||||
nextElement = _annotationContextsByAnnotationTag[_selectedAnnotationTag].accessibilityElement;
|
||||
nextElement = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag).accessibilityElement;
|
||||
}
|
||||
[self deselectAnnotation:self.selectedAnnotation animated:YES];
|
||||
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nextElement);
|
||||
@@ -3082,7 +3082,7 @@ public:
|
||||
return nil;
|
||||
}
|
||||
|
||||
MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag[tag];
|
||||
MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag);
|
||||
return annotationContext.annotation;
|
||||
}
|
||||
|
||||
@@ -3552,8 +3552,12 @@ public:
|
||||
{
|
||||
id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
|
||||
NSAssert(annotation, @"Unknown annotation found nearby tap");
|
||||
if ( ! annotation)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag[annotationTag];
|
||||
MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
|
||||
CGRect annotationRect;
|
||||
|
||||
MGLAnnotationView *annotationView = annotationContext.annotationView;
|
||||
@@ -3867,8 +3871,6 @@ public:
|
||||
/// and is appropriate for positioning a popover.
|
||||
- (CGRect)positioningRectForCalloutForAnnotationWithTag:(MGLAnnotationTag)annotationTag
|
||||
{
|
||||
MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag[annotationTag];
|
||||
|
||||
id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
|
||||
if ( ! annotation)
|
||||
{
|
||||
|
||||
@@ -1820,7 +1820,7 @@ public:
|
||||
return nil;
|
||||
}
|
||||
|
||||
MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag[tag];
|
||||
MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag);
|
||||
return annotationContext.annotation;
|
||||
}
|
||||
|
||||
@@ -2057,8 +2057,8 @@ public:
|
||||
// Filter out any annotation whose image is unselectable or for which
|
||||
// hit testing fails.
|
||||
auto end = std::remove_if(nearbyAnnotations.begin(), nearbyAnnotations.end(), [&](const MGLAnnotationTag annotationTag) {
|
||||
NSAssert(_annotationContextsByAnnotationTag.count(annotationTag) != 0, @"Unknown annotation found nearby click");
|
||||
id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
|
||||
NSAssert(annotation, @"Unknown annotation found nearby click");
|
||||
if (!annotation) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user