{«Сообщение»: «Забор: onClientEventRegionState, недопустимое состояние», «regionState»: «0»} в ios

#ios #swift #ios10

#iOS #swift #ios10

Вопрос:

Я хочу уведомить пользователя, когда он / она достиг определенного этажа, используя маяки оценки. Для выполнения моей задачи я разработал свой код, как показано ниже:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    self.beaconManager.delegate = self

    self.beaconManager.requestAlwaysAuthorization()
    let firstFloorRegion = CLBeaconRegion(
        proximityUUID: uuid,
        major: 2, identifier: "")
    firstFloorRegion.notifyOnEntry = true
    firstFloorRegion.notifyOnExit = true
    firstFloorRegion.notifyEntryStateOnDisplay = true
    self.beaconManager.startMonitoring(for: firstFloorRegion)
    self.beaconManager.requestState(for: firstFloorRegion)

    return true
}
func beaconManager(manager: AnyObject, didDetermineState region: CLBeaconRegion) {

    NSLog("didDetermineState Called")
}
private func beaconManager(manager: AnyObject, didEnterRegion region: CLBeaconRegion) {

    NSLog("DidEnterRegion Called")
}
private func beaconManager(manager: AnyObject, didExitRegion region: CLBeaconRegion) {

    NSLog("didExitRegion Called")
}
  

в течение нескольких дней он работал отлично. Но начиная с последних 2 дней и далее, он показывает ошибку в консоли xcode следующим образом:

[Клиент] {«Сообщение»: «Забор: onClientEventRegionState, недопустимое состояние», «regionState»:»0″}.

Я не могу понять, что это значит. Я также не нашел никакого решения в Интернете. Помогите мне выбраться из этого.

Ответ №1:

Я заметил, что мониторинг iBeacon (и мониторинг региона в целом) занимает до 10 минут для работы после перезагрузки телефона. Конечно же, я перезапустил свой телефон и получил вашу ошибку в выводе консоли при вызове

 manager.requestState(for: myRegion)
  

Я никогда не видел, чтобы Apple говорила о каких-либо негативных последствиях вызова

 manager.startMonitoring(for: myRegion)
  

в уже зарегистрированном регионе. Однако я не вызываю это при каждом запуске приложения. Вместо этого я проверяю контролируемые регионы следующим образом:

 for monitoredRegion in self.locationManager.monitoredRegions as! Set<CLBeaconRegion> {

   print("Monitoring: "   monitoredRegion.proximityUUID.uuidString   " "   monitoredRegion.identifier)

   self.locationManager.requestState(for: monitoredRegion)

   switch monitoredRegion.proximityUUID.uuidString {
      case myRegionUUID.uuidString:
         needToMonitorMyRegion = false
      default:
         break
    }
}
  

Я не получаю сообщение об ошибке, когда я подтверждаю регистрацию таким образом. Я получаю сообщение об ошибке только при перезагрузке телефона.