我正在构建一个使用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永远不会被调用吗?
谢谢! 埃里克