iPhone区域监控 - 未添加区域?

时间:2010-12-21 11:31:33

标签: ios4 monitoring cllocationmanager region locationmanager

我正在尝试设置区域监控。看起来非常简单;但是当我检查我监控的区域数量时,计数总是为0。

代码:

if ([CLLocationManager regionMonitoringAvailable] &&
    [CLLocationManager regionMonitoringEnabled] ) {

    CLLocationCoordinate2D coordinate;
    double radius;

    for(Item *item in ad.proxiArray) {

        radius = [item.distance floatValue];

        coordinate= CLLocationCoordinate2DMake([item.latitude doubleValue],
                                                [item.longitude doubleValue]);
        CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coordinate radius:radius identifier:item.place];

        NSLog(@"Adding: %@", region);

        [self.locationManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyNearestTenMeters];

        [region release];
    }   
    NSLog(@"region count %i",[[self.locationManager monitoredRegions] count]);
    for (CLRegion *re in [self.locationManager monitoredRegions]) {
        NSLog(@"Monitoring: %@", re);
    }
} else {
    NSLog(@"Region monitoring unavailable");
}

运行时,NSLog会显示我实际上正在添加所有项目(大约10个)。但是在循环结束时,如上所述:

  

2010-12-21 12:14:38.172 xxxxxx [8112:307]地区数0

怎么了????

1 个答案:

答案 0 :(得分:1)

我的印象是

  • CLLocationManager本身不是线程安全的。区域监控和位置监控会干扰并偶尔会导致阻塞(从我的观察来看,必须有一种超时,因为程序在超过30秒后继续工作)
  • 区域将以异步方式添加,因此在完成添加区域后直接检查区域数量可能会导致错误的结果。
  • 当实际添加区域以进行监控时,准确度非常差(分辨率为几公里)

由于这些问题以及区域监控不是很准确的事实,我放弃了使用该功能的想法。