Подтвердить что ты не робот

Как отключить объекты CLRegion, зарегистрированные в -startMonitoringForRegion?

Я использую 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];, но он возвращает только активный забор и только когда у меня загружено мое подробное представление. Я не могу назвать это другим местом в своей программе и заставить его возвращать любые мои заборы, хотя я знаю, что они должны быть активными. Если у кого-нибудь есть советы, куда идти дальше, я все уши.

4b9b3361

Ответ 1

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

for (CLRegion *monitored in [locationManager monitoredRegions])
    [locationManager stopMonitoringForRegion:monitored];

Ответ 2

Хорошо, я думаю, что смогу ответить на свой вопрос здесь, наконец. Означает ли это, что я могу претендовать на собственную щедрость?: 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 Удачи.

Ответ 3

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