Ответ 1
Или, более простое решение:
for (CLRegion *monitored in [locationManager monitoredRegions])
[locationManager stopMonitoringForRegion:monitored];
Я использую 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];
, но он возвращает только активный забор и только когда у меня загружено мое подробное представление. Я не могу назвать это другим местом в своей программе и заставить его возвращать любые мои заборы, хотя я знаю, что они должны быть активными. Если у кого-нибудь есть советы, куда идти дальше, я все уши.
Или, более простое решение:
for (CLRegion *monitored in [locationManager monitoredRegions])
[locationManager stopMonitoringForRegion:monitored];
Хорошо, я думаю, что смогу ответить на свой вопрос здесь, наконец. Означает ли это, что я могу претендовать на собственную щедрость?: 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 Удачи.
Да, это ошибка iOS. Удаление и переустановка приложения не помогает. Единственный способ избавиться от этой проблемы - сбросить предупреждения о местоположении