2015-03-12 5 views
1

Я создаю приложение iOS 8, которое использует GeoFencing. У меня возникли проблемы, которые я объясню позже. Но во-первых, это то, как создать регион и контролировать его:район мониторинг не вызывает didExitRegion, если условия

Переменные в файле заголовка:

@property (nonatomic, strong) CLLocationManager *locationManager; 

viewDidLoad:

// Initialize locationManager 
    self.locationManager = [[CLLocationManager alloc] init]; 

    [self.locationManager requestAlwaysAuthorization]; 

    // Set the delegate 
    self.locationManager.delegate = self; 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    self.locationManager.distanceFilter = kCLLocationAccuracyBest; 

Создание региона:

- (CLRegion*)mapDictionaryToRegion:(NSDictionary*)dictionary 
{ 
NSString *title = [dictionary valueForKey:@"title"]; 

CLLocationDegrees latitude = [[dictionary valueForKey:@"latitude"] doubleValue]; 
CLLocationDegrees longitude =[[dictionary valueForKey:@"longitude"] doubleValue]; 
CLLocationCoordinate2D centerCoordinate = CLLocationCoordinate2DMake(latitude, longitude); 

CLLocationDistance regionRadius = [[dictionary valueForKey:@"radius"] doubleValue]; 

return [[CLRegion alloc] initCircularRegionWithCenter:centerCoordinate 
               radius:regionRadius 
              identifier:title]; 
} 

Старт мониторинг его:

-(void)startMonitoringForDictionary:(NSDictionary *)dictionary 
{ 
// Start monitoring for the supplied data 
CLRegion *region = [self mapDictionaryToRegion:dictionary]; 
[self.locationManager startMonitoringForRegion:region]; 

} 

Прослушивание области пересечения:

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
{ 
NSLog(@"Error: %@", error); 
} 

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{ 
NSLog(@"didEnterRegion"); 
} 

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region 
{ 
NSLog(@"exited region"); 
} 

Я запомнил эти ключи в моей целевой информации:

NSLocationAlwaysUsageDescription 
NSLocationWhenInUseUsageDescription 

Проблема:

Иногда, когда я вхожу в регион, он работает безупречно. Оба didEnterRegion и didExitRegion называются ожидаемыми. Но похоже, что я добавляю область внутри нее, а затем выходим - она ​​не будет вызывать didExitRegion. Только если он сначала вызывает didEnterRegion.

Что я спрашиваю:

Может кто-то пожалуйста, объясните «правила» для мониторинга области, и как устройство управляет ею, сообщает об этом, будит приложение, и т.д.? Кроме того, я прочитал в документации, что я не должен ожидать обновлений чаще, чем каждые 5 минут. (Эта вещь, которую я делаю на практике, вычисляет, как долго вы проводили внутри региона) - что, если пользователь входит, тогда существует быстро - тогда didExitRegion никогда не будет вызван, пока я не войду снова?

Спасибо! Erik

+0

Hi @Erik, вы придумали решение для этого? –

+1

@QuentinMalgaud Привет! Я не нашел конкретной проблемы или решения, но после многократного изменения и изменения кода я получил его на работу. Я недавно сделал свое приложение, чтобы иметь новый дизайн и более чистый код, и он работал безупречно, даже если я добавил область внутри нее. Просто пройдите каждый шаг и убедитесь, что вы сделали все. Там может быть что-то скрытое в точности и спецификации фильтра, хотя - взгляните на тех, кто, возможно, – Erik

ответ

Смежные вопросы