monitoredRegions пусто, хотя startMonitoringForRegion: требуемая точность: вызывается - PullRequest
4 голосов
/ 25 января 2012

Я разрабатываю приложение для iPhone, работающее на iOS5, и не могу настроить геозон при вызове метода startMonitoringForRegion:desiredAccuracy: по нажатию кнопки.

Он отлично работает в симуляторе при печатирегионы в monitoredRegions, но при работе на реальном iPhone 4 monitoredRegions всегда пусто.Как и ожидалось, методы didEnterRegion: и didExitRegion: также не вызываются.

Еще один загадочный факт заключается в том, что на ОБА симуляторе и устройстве iPhone 4 метод CLLocationManagerDelegate didStartMonitoringForRegion: также никогда не вызывается.

Буду признателен за помощь, спасибо!

РЕДАКТИРОВАТЬ: это метод, который я вызываю по нажатию кнопки:

-(void) queueGeofence: (CLLocationCoordinate2D)selectedBranch userCoordinate:(CLLocationCoordinate2D)userCoordinate radius: (CLLocationDegrees)radius {
geofence = [[CLRegion alloc] initCircularRegionWithCenter:selectedBranch radius:radius identifier:@"geofence"];

CLLocationAccuracy acc = kCLLocationAccuracyNearestTenMeters;

[locationManager startMonitoringForRegion:geofence desiredAccuracy:acc];
[CLLocationManager regionMonitoringEnabled];

NSLog([CLLocationManager regionMonitoringEnabled] ? @"regionMonitoringEnabled:Yes" : @"regionMonitoringEnabled:No");
NSLog([CLLocationManager regionMonitoringAvailable] ? @"regionMonitoringAvailable:Yes" : @"regionMonitoringAvailable:No");

NSLog(@"LOCATIONMANAGER monitored regions: %@", [locationManager monitoredRegions]});
}

Мониторинг области включен идоступно, но monitoredRegions все еще не возвращает мне ничего.

Ответы [ 3 ]

3 голосов
/ 16 марта 2012

Если вы посмотрите в CLLocationManager.h, комментарии в заголовке для startMonitoringForRegion:desiredAccuracy: утверждают, что

Если регион с тем же идентификатором уже отслеживается для этого приложения, он будут удалены из мониторинга. Это делается асинхронно и не может быть немедленно отражено в monitoredRegions.

Следовательно, не обязательно ожидать, что [locationManager monitoredRegions] будет включать ваш недавно добавленный регион, поскольку он добавляется асинхронно.

Реализуете ли вы метод делегата для locationManager:monitoringDidFailForRegion:withError:? Может быть, это вызывается вместо locationManager:didStartMonitoringForRegion:. Также обратите внимание, что регион с тем же идентификатором, что и существующий регион, будет удален, поэтому у вас могут возникнуть непредвиденные проблемы, поскольку вы повторно используете "geofence" в качестве идентификатора.

1 голос
/ 09 марта 2012

Если вы просто используете свой NSLog, он, вероятно, не будет работать. [locationManager monitoredRegions] возвращает NSSet из CLRegions. Они не будут отображаться в вашем журнале таким образом. Попробуйте это:

NSSet *setOfRegions = [locationManager monitoredRegions];
for (CLRegion *region in setOfRegions) {
   NSLog (@"region info: %@", region);
}
1 голос
/ 25 января 2012

Прежде всего, вы должны быть уверены, что ваше приложение имеет разрешение на использование LocationManager.Проверьте это, когда вы назначите своего менеджера.

[CLLocationManager authorizationStatus];

У меня была такая же проблема при запуске приложения и отклонении разрешения.И после удаления и перестройки приложения.У меня был флаг, этот пользователь не принял его.Включите его.

...