Как я могу отключить любые объекты CLRegion, зарегистрированные с -startMonitoringForRegion? - PullRequest
24 голосов
/ 15 августа 2011

Я использую NavigationController для отображения списка геозон, доступных пользователю.Вверху есть глобальный переключатель вкл / выкл, который я хотел бы использовать, чтобы отключить любые заборы, зарегистрированные в CoreLocation -startMonitoringForRegion.

Кажется, что мои заборы регистрируются нормально и работают по большей части, но неважноСколько раз я отключаю заборы по отдельности, я все еще получаю фиолетовую стрелку, указывающую на то, что система все еще отслеживает мое местоположение и / или заборы.

Когда я отключаю заборы по отдельности, это то, как яЯ делаю это.

CLLocationCoordinate2D coord;
coord.latitude = [[settingsData valueForKey:@"latitude"] doubleValue];
coord.longitude = [[settingsData valueForKey:@"longitude"] doubleValue];
CLLocationDistance radius = [[settingsData valueForKey:@"radius"] intValue];
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coord radius:radius identifier:[settingsData valueForKey:@"name"]];

// remove this fence from system monitoring
[locationManager stopMonitoringForRegion:region];
[region release];

Я просмотрел всю документацию Apple по CoreLocation и использованию этих методов, и я нахожусь в конце своей веревки.

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

Ответы [ 3 ]

50 голосов
/ 03 июля 2012

Или, более простое решение:

for (CLRegion *monitored in [locationManager monitoredRegions])
    [locationManager stopMonitoringForRegion:monitored];
13 голосов
/ 26 августа 2011

Хорошо, я думаю, что смогу наконец ответить на свой вопрос.Значит ли это, что я могу получить свою награду?: D

Во-первых, задерживающаяся стрелка местоположения кажется ошибкой iOS.Я нашел несколько историй с одной и той же проблемой.Так что пока я ничего не могу с этим поделать.

Что касается удаления всех моих регионов за раз, я получил это сейчас.

NSArray *regionArray = [[locationManager monitoredRegions] allObjects]; // the all objects is the key
for (int i = 0; i < [regionArray count]; i++) { // loop through array of regions turning them off
     [locationManager stopMonitoringForRegion:[regionArray objectAtIndex:i]];
}

Я былсмог показать мой массив и доказал, что они все были там.Еще одна проверка после удаления показывает, что все они исчезли.Уфф !!Проблема стрелки местоположения остается в зависимости от того, какую версию iOS вы используете.Я не могу этого, я думаю.Если у вас есть пользователи, обязательно сообщите им, что фиолетовая стрелка - это не ваша вина.Для получения дополнительной информации по этому вопросу, вы можете начать здесь. GetSatisfaction Удачи.

2 голосов
/ 26 августа 2011

Да, это ошибка iOS.Удаление и переустановка приложения не помогает.Единственный способ избавиться от проблемы - сбросить предупреждения о местоположении

...