2014-01-19 2 views
12

Я хочу публиковать уведомление, когда пользователи входят в регион. Тем не менее, я очень смущен из-за тех же двух методов CLLocationManagerDelegate. Как следует использовать эти два метода правильно?iBeacon: В чем разница между didEnterRegion и didDetermineState (CLRegionStateInside)

Некоторые люди говорят, что метод «didDetermineState» необходим для запуска наблюдения за областью, если приложение запускается в регионе.

Спасибо,

- (void)locationManager:(CLLocationManager *)manager 
     didEnterRegion:(CLRegion *)region 
{ 
    [self sendNotification:@"didEnterRegion"]; 
} 

- (void)locationManager:(CLLocationManager *)manager 
     didDetermineState:(CLRegionState)state 
       forRegion:(CLRegion *)region 
{ 
    switch (state) { 
     case CLRegionStateInside: 
     [self sendNotification:@"didEnterRegion"]; 
      break; 
     case CLRegionStateOutside: 
      break; 
     case CLRegionStateUnknown: 
      break; 
     default: 
      break; 
    } 
} 

ответ

21

компания Apple documentation for CLLocationManager состояние:

местоположение менеджер вызывает этот метод, когда есть граница переход для региона. Он вызывает этот метод в дополнение к вызовам методов locationManager:didEnterRegion: и locationManager:didExitRegion:. Менеджер местоположений также вызывает этот метод в ответ на вызов его метода requestStateForRegion:, который выполняется асинхронно.

Так didDetermineState должен вызываться всякий раз, когда didEnterRegion/didExitRegion делать. Кроме того, если вы явно запросите состояние через requestStateForRegion, он будет вызван.

Существует еще одно поведение, которое запускает этот метод: если вы контролируете регион, в котором вы включили свойство notifyEntryStateOnDisplay, метод будет вызываться всякий раз, когда пользователь разбудит свое устройство вручную, и они находятся в регионе, где вы контролируют. От the documentation

Если установлено значение «ДА», диспетчер местоположений отправляет уведомления маяка, когда пользователь включает дисплей, а устройство уже находится внутри региона. Эти уведомления отправляются, даже если ваше приложение не запущено. В этой ситуации система запускает ваше приложение в фоновом режиме, чтобы оно могло обрабатывать уведомления. В обеих ситуациях менеджер местоположений вызывает метод locationManager:didDetermineState:forRegion: своего объекта-делегата.

Смежные вопросы