Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Bill BurgessОтветов: 3

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

  • Получу ли я значок за вопрос, которого все избегают, как чумы? Bill Burgess 16.08.2011
  • Вы пытались задать этот вопрос на devforums.apple.com? jtbandes 23.08.2011
  • Нет, но, наверное, должен. Я ничего не получаю с этим здесь. Bill Burgess 23.08.2011
  • Образец приложения LocationReminders с WWDC 2010, по-видимому, подразумевает, что вам нужно передать тот же экземпляр CLRegion, чтобы остановить, который вы использовали для запуска. Я не могу проверить это в данный момент. 23.08.2011
  • Я могу отменить регистрацию региона, если я использую тот же регион, в котором я его создал, но если я не знаю, какой регион существует ... как мне узнать, какой из них создать, чтобы удалить его. Эта проблема пинала меня в задницу, и об этом не так много. Bill Burgess 24.08.2011

iosiphonecore-locationclregion

Ответы

Ответ 1 · рейтинг 50 · thepaperboy

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

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

Ответ 2 · рейтинг 13 · Bill Burgess

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы