Действительно ли startMonitoringForRegion работает? - PullRequest
4 голосов
/ 29 января 2012

Я пытался использовать startMonitoringForRegion какое-то время, но у меня возникли проблемы с захватом событий входа / выхода.Когда я запускаю приложение на симуляторе и перемещаюсь в указанное мной место, я получаю 1 событие ввода, но события ввода больше не срабатывают.Может кто-нибудь сообщить мне, если я делаю правильно?

test.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface EWViewController : UIViewController<CLLocationManagerDelegate> 
{
    CLLocationManager *locman;
}

@end

test.m

- (void)viewDidLoad
{
    if(locman == nil)
        locman = [[CLLocationManager alloc]init];

    locman.delegate = self;
    CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(37.787359, -122.408227);
    CLRegion *region = [[CLRegion alloc]initCircularRegionWithCenter:coord radius:1000.0 identifier:@"SF"];
    [locman startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyKilometer];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    NSLog(@"ENTER");
}

- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
    NSLog(@"EXIT");
}

Ответы [ 2 ]

2 голосов
/ 29 января 2012

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

Хотя вы можете получить еще лучшие и более точные показания из -didUpdateToLocation, вам придется поменять время работы от батареи, чтобы получить его. Если вам нужны только случайные обновления местоположения, все должно быть в порядке. Если вам нужен постоянный мониторинг для конкретных мест, то лучше всего контролировать регион.

Я обнаружил, что -startMonitoringForSignificantLocation совсем не точен и не очень практичен. Он опирается исключительно на переходы башни и триангуляцию. По этой же причине его нельзя использовать для тестирования в симуляторе. Надеюсь, что эта информация поможет вам.

0 голосов
/ 29 января 2012

Да, это работает, но на данный момент это очень неточно. (Я проверял это в России)

Я рекомендую использовать это вместо:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation;
...