Необходим или нет вызов locationManager.requestState(for: region)
, все зависит от вашего варианта использования.
Обратный вызов locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion)
будет вызван автоматически в следующих случаях:
- Когда выПервый запуск мониторинга.
- Для всех изменений состояния региона.Это включает в себя .outside -> .inside, .inside -> .outside, а также переходы в и из .unknown
- Всякий раз, когда дисплей подсвечивается (только если вы установили контролируемый
BeaconRegion
notifyEntryStateOnDisplay=true
)
Итак, если этих случаев достаточно для вас, тогда вам не нужно запрашивать дополнительные обратные вызовы .Как правило, это действительно так.
Однако существуют редкие случаи использования, в которых полезно явно запросить новый обратный вызов.Возможно, ваше приложение представляет новый View Controller, а затем хочет визуально показать пользователю состояние региона.Удобно иметь возможность вызывать requestState
при загрузке представления, а затем обновлять отображение при выполнении обратного вызова.
Определенные побочные эффекты и проблемы, вызванные дополнительными обратными вызовами, действительно зависят от того, что выположить внутри обратного вызова. Если вы запускаете или прекращаете мониторинг в этих обратных вызовах, очень легко создать петли обратной связи, которые вызывают проблемы.