1

我正在使用 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,并徒劳地查看了有关相关主题的其他问题。关于为什么其中一个区域转换事件会触发,而另一个不会触发的任何建议?

4

1 回答 1

0

我在 5.1 中遇到了同样的问题。我向苹果公司提交了一个雷达作为一个错误。它会触发第一个事件,进或出,但之后没有其他事件。

据我所知,这个问题已经在 iOS 6 测试版中得到解决。因此,请等待 iOS 6 上线时解决。

雷达:11715223

于 2012-07-04T01:39:34.687 回答