Эта строка выдает ошибку, потому что CLLocationCoordinate2D
является типом структуры, а theCoordinate1
, я полагаю, является переменной типа CLLocationCoordinate2D
.Вы не можете сравнить их.
То, что вы пытаетесь сделать, это сравнить координаты текущей аннотации, для которой запрашивается вид, с координатами в theCoordinate1
.Чтобы сделать это, если вам нужно, вам нужно что-то вроде этого:
if ((annotation.coordinate.latitude == theCoordinate1.latitude)
&& (annotation.coordinate.longitude == theCoordinate1.longitude)) {
Однако я не рекомендую сравнивать числа с плавающей запятой таким образом, даже если это иногда «работает».Если вам нужно сравнить координаты, используйте метод CLLocation distanceFromLocation:
и посмотрите, находится ли расстояние между ними ниже некоторого порога, например 10,0 м.
Еще один способ проверить, является ли аннотация той, которую вы ищете,сохранить ссылку на саму аннотацию (ту, которую вы передали методу addAnnotation:
), а затем вы можете сделать if (annotation == theAnnotation1)
.
Если вы не хотите сохранять ссылку на аннотации, выВы также можете проверить, является ли заголовок аннотации тем, что вы ищете (if ([annotation.title isEqualToString:@"Jeff"])
).
Лучший способ - добавить пользовательское свойство (в идеале int) в пользовательский класс аннотаций и проверитьдля этого в viewForAnnotation.
Несколько других не связанных вещей:
- Вместо того, чтобы делать addTarget, обработайте нажатие кнопки в собственном методе делегата
calloutAccessoryControlTapped
представления карты, который будетдайте ссылку на аннотацию (см. Как узнать, какую аннотацию отправьте showDetails? , например). - У вас есть комментарий к "dequeue", но вы этого не делаетеЭто.Для повторного использования представлений рекомендуется использовать
dequeueReusableAnnotationViewWithIdentifier
в viewForAnnotation (см., Например, EXC_BAD_ACCESS с MKPinAnnotationView ).