Как проверить равенство двух CLLocations - PullRequest
10 голосов
/ 30 июня 2011

У меня проблема с isEqual:

код:

 if (currentAnchor isEqual:currentBusiness.getCllLocation))
    {
        do a;
    }
    else
    {
        do b;
    }

currentanchor и currentbusiness.getCllocation - местоположения

Но если они одинаковы, почему вызывается функция b? Что-то не так с моим кодом?

Ответы [ 4 ]

27 голосов
/ 30 июня 2011

Я предполагаю, что оба эти объекта имеют тип CLLocation, основываясь на имени getClLocation.

CLLocation не имеет никакой спецификации того, что делает его метод isEqual:, поэтому он, вероятно, просто наследует реализацию NSObject, которая просто сравнивает указатели объектов. Если у вас есть два разных объекта с одинаковыми данными, то реализация isEqual: вернет NO. И если у вас есть два разных объекта с небольшим изменением местоположения, они определенно не будут равны.

Возможно, вы не хотите isEqual: при сравнении объектов местоположения. Скорее всего, вы хотите использовать метод distanceFromLocation: на CLLocation. Примерно так будет лучше:

CLLocationDistance distanceThreshold = 2.0; // in meters
if ([currentAnchor distanceFromLocation:currentBusiness.getCllLocation] < distanceThreshold)
{
  do a;
}
else
{
  do b;
}
2 голосов
/ 22 сентября 2012

Это было давно.

То, что я сделал, похоже на BJ Homer.Я просто добавляю это.

@interface CLLocation  (equal)
- (BOOL)isEqual:(CLLocation *)other;
@end

@implementation CLLocation  (equal)

- (BOOL)isEqual:(CLLocation *)other {


    if ([self distanceFromLocation:other] ==0)
    {
        return true;
    }
    return false;
}
@end

Я был удивлен, что именно я задавал этот вопрос:)

0 голосов
/ 25 октября 2017

Swift 4.0 версия:

let distanceThreshold = 2.0 // meters
if location.distance(from: CLLocation.init(latitude: annotation.coordinate.latitude,
                                           longitude: annotation.coordinate.longitude)) < distanceThreshold
{ 
    // do a
} else {
    // do b
}
0 голосов
/ 30 июня 2011

isEqual просто проверяйте только объекты, а не их содержимое. вам нужно создать свой собственный метод, где вы обращаетесь к переменным объекта и проверяете их на равенство, используя оператор ==.

...