除非条件,否则区域监视不会调用didExitRegion

时间:2015-03-12 15:23:38

标签: ios objective-c location cllocationmanager geofencing

我正在构建一个使用GeoFencing的iOS 8应用。我有一些问题,我稍后会解释。但首先,这是我创建一个区域并监控它的方式:

标头文件中的变量:

@property (nonatomic, strong) CLLocationManager *locationManager;

viewDidLoad中:

    // Initialize locationManager
    self.locationManager = [[CLLocationManager alloc] init];

    [self.locationManager requestAlwaysAuthorization];

    // Set the delegate
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = kCLLocationAccuracyBest;

创建地区:

- (CLRegion*)mapDictionaryToRegion:(NSDictionary*)dictionary
{
NSString *title = [dictionary valueForKey:@"title"];

CLLocationDegrees latitude = [[dictionary valueForKey:@"latitude"] doubleValue];
CLLocationDegrees longitude =[[dictionary valueForKey:@"longitude"] doubleValue];
CLLocationCoordinate2D centerCoordinate = CLLocationCoordinate2DMake(latitude, longitude);

CLLocationDistance regionRadius = [[dictionary valueForKey:@"radius"] doubleValue];

return [[CLRegion alloc] initCircularRegionWithCenter:centerCoordinate
                                               radius:regionRadius
                                           identifier:title];
}

开始监控:

-(void)startMonitoringForDictionary:(NSDictionary *)dictionary
{
// Start monitoring for the supplied data
CLRegion *region = [self mapDictionaryToRegion:dictionary];
[self.locationManager startMonitoringForRegion:region];

}

倾听区域交叉:

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"Error: %@", error);
}

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

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

我在目标信息中记住了这些键:

NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription

问题:

有时当我进入某个地区时,它会完美无瑕。 didEnterRegion和didExitRegion都像预期的那样被调用。但看起来好像我在里面添加了区域,然后退出 - 它不会调用didExitRegion。只有先调用didEnterRegion。

我在问什么:

有人可以解释"规则"区域监控以及设备如何管理,报告,唤醒应用程序等?另外,我在文档中读到,我不应该比每5分钟更频繁地期待更新。 (我练习的这个东西会计算你在一个区域内花了多长时间) - 如果用户输入然后快速存在 - 那么在我再次进入之前,didExitRegion永远不会被调用吗?

谢谢! 埃里克

1 个答案:

答案 0 :(得分:0)

调用startMonitoringForRegion

时,您必须立即致电requestState