我正在使用 CLLocationManager 来监控 iOS 中的区域。我以正常方式设置委托:
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
并实现几个委托功能,包括:
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
NSLog(@"GeoFence: didEnterRegion");
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"GeoFence: didExitRegion");
}
然后我开始监视一个区域:
CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(lat, lng);
CLRegion *grRegion = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:radius identifier:[NSString stringWithFormat:@"grRegion%i", 1]];
CLLocationAccuracy acc = kCLLocationAccuracyNearestTenMeters;
[self.locationManager startMonitoringForRegion:grRegion desiredAccuracy:acc];
为 lat (51.116261)、lng (-0.85300) 和 radius (200) 设置适当的值。在 iPhone 5.1 模拟器中构建并运行应用程序后,我使用 Xcode 4.3 中的位置注入工具在远处位置和目标位置之间移动并再次返回。在此过程下,didEnterRegion 事件正确触发,但 didExitRegion 永远不会触发。我还收到了其他委托回调,例如 didUpdateToLocation。我改变了模拟动作的模式,使用了模拟器的位置设置工具而不是 Xcode 的,并尝试了在装有 iOS 5.1 的 iPhone 4S 上运行应用程序的相同测试。所有测试都有相同的结果。
我已确保按照其他线程中的建议启用了 WiFi,并徒劳地查看了有关相关主题的其他问题。关于为什么其中一个区域转换事件会触发,而另一个不会触发的任何建议?