2014-02-18 3 views
4

Я работаю над таким проектом, где приложения сделать следующие вещи:Количество «регион» под наблюдением RegionMonitoring, на основе пользователей текущего местоположения в iOS7

  1. Пользователь выбрать радиус (10 метров до 1000 метров) и перейти к следующим viewController, нажав кнопку «Go»
  2. Здесь приложения пользователи Грабилки текущего положения и начать «мониторинг региона» на основе этой текущей позиции с выбранным радиусом
  3. Если пользователь пересекает определенную границу (10 метров до 1000 метров), тогда он выдает предупреждающее сообщение «ExitRegion». И снова начните «мониторинг региона», основываясь на новой новой позиции пользователей. И приложения продолжают делать это все время, как на переднем плане, так и в фоновом режиме. Мне это удается & работает отлично.

Теперь, я контролирую один регион, после этого другой. Таким образом, число на самом деле одно. Но я знаю максимальное количество регионов, в которых один мониторинг приложений «Мониторинг регионов» равен 15. Теперь мой вопрос заключается в том, должен ли я обрабатывать это максимальное количество проблем региона или нет? Если да, то как?

Еще одна вещь, которую я хочу добавить, есть некоторое ее решение, которое работает только для iOS 6 и ранее. Поэтому, пожалуйста, дайте мне знать, есть ли какое-то решение обработки «региона», контролируемого «RegionMonitoring», на основе текущего местоположения пользователей в iOS7.

Мне будет очень приятно, если вы сможете дать ответ или любое предложение, чтобы закончить требования к моим приложениям. Большое спасибо в продвинутом виде. Хорошего дня.

ответ

4

Если вы проверяете документы, максимальный лимит равен 20. Когда вы превысите этот номер, iOS выдает контроль над самым старым регионом (подумайте, что это похоже на его очередь FIFO). Убедитесь, что радиус меньше, чем maximumRegionMonitoringDistance. Таким образом, другими словами, вам не нужно беспокоиться о максимальном пределе, вы можете убедиться в этом, выполнив делегат didStartMonitoringForRegion:.

Но, если вы хотите контролировать количество регионов, находящихся под наблюдением самостоятельно, вы всегда можете остановить мониторинг региона, используя stopMonitoringForRegion:. Вы можете получить список регионов, находящихся под наблюдением, с помощью объекта monitoredRegions. Вы всегда можете прояснить регион, который вам больше не нужен. Это хорошая практика, чтобы сохранить его как минимум, так как он влияет на производительность батареи и приложения.

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

for (CLCircularRegion *region in self.locationManager.monitoredRegions) { 
    [self.locationManager stopMonitoringForRegion:region]; 
} 

Но в вашем случае я бы предложил использовать константу для идентификатора области (например, «MY-РЕГИОН»), так как вы не можете контролировать две зоны с одинаковым идентификатором, добавив другой регион с таким же идентификатором удаляет ранее контролируемый регион автоматически.

CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:50.0f identifier:@"MY-REGION"]; 
[self.locationManager startMonitoringForRegion:region]; 
+0

Благодарим за предложение. Я хочу удалить предыдущий контролируемый регион на каждом шагу. Я имею в виду, когда пользователь выходит из региона, тогда он удаляет предыдущий регион и запускает другой «мониторинг региона» на основе текущей позиции пользователей. Я пытаюсь с этим: '[locationManager stopMonitoringForRegion: [[[locationManager monitoredRegions] allObjects] objectAtIndex: 0]];' и вызвал его только в начале области мониторинга. Но не работает должным образом. У вас есть представление об этом? -Спасибо – Tulon

+0

Я отредактировал ответ, с решением. – Zee

+0

Я провел некоторое тестирование на iOS8 iphone 5s. Как только вы нажмете 20 регионов, вы больше не будете устанавливать больше.Старые регионы не выселяются. Кроме того, если кому-то интересно (потому что документация не совсем понятна), вы можете установить 20 BeaconRegions и 20 CircularRegions. – James