为什么didEnterRegion叫了两次?

时间:2012-12-27 11:51:44

标签: iphone ios cllocationmanager clregion

我正在使用位置服务,即在我的iOS应用中进行区域监控, 这是我的代码

//this for creating region
-(void)createRegion
{
    [dictionary setValue:@"23 St, New York" forKey:@"title"];
    [dictionary setValue:[NSNumber numberWithDouble:40.742878] forKey:@"latitude"];
    [dictionary setValue:[NSNumber numberWithDouble:-73.992821] forKey:@"longitude"];
    [dictionary setValue:[NSNumber numberWithDouble:(300.0)] forKey:@"radious"];

    [regionArray addObject:[self mapDictionaryToRegion:dictionary]];
    [self initializeRegionMonitoring:regionArray];
}
- (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) initializeRegionMonitoring:(NSArray*)geofences {
    if(![CLLocationManager regionMonitoringAvailable]) {
       // [self showAlertWithMessage:@"This app requires region monitoring features which are unavailable on this device."];
        return;
    }

    for(CLRegion *geofence in geofences) {
        [_locationManager startMonitoringForRegion:geofence];
    }
}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"entered region %@",region.identifier);
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    NSLog(@"exited region %@",region.identifier);
}

当app在前台时,它工作正常。它显示我的日志:“输入区域..”和“退出区域..”, 但当应用程序进入后台时,相同的日志会在几分之一秒内打印两次,即委托方法调用两次,我不需要,有没有办法避免调用2次? 或者在创建或监控区域时是否有任何错误? 请帮我 .. 提前谢谢..

2 个答案:

答案 0 :(得分:9)

我相信这个问题与我自己的问题相同。我认为Apple的区域监控API存在一个错误。我已经向Apple提出了这个问题的雷达,但到目前为止还没有收到任何回复。

我解决这个问题的一种方法是在didEnter和didExit方法中保存时间戳,如果方法在保存的时间戳的10秒内触发,则跳过该方法作为欺骗。

如果有人有兴趣,我在github上有一个项目,显示了这个问题。

https://github.com/billburgess/GeofenceBug

随意提交另一个雷达,因为这是Apple注意到问题并采取行动的唯一方式。雷达编号为12452255 - 重复代表呼叫进行区域监控。

如果您想要使用这种雷达,这里是带有信息的开放雷达链接。 http://openradar.appspot.com/radar?id=2484401

答案 1 :(得分:1)

与核心问题无关,但......

[dictionary setValue:[NSNumber numberWithDouble:(300.0)] forKey:@"radious"];

应该是:

[dictionary setValue:[NSNumber numberWithDouble:(300.0)] forKey:@"radius"];

你有“半径”错字