2015-10-05 48 views
3

didRangeBeacons方法几乎被称为iOS 9中的每秒钟时间为40次。但是,在iOS 8及其以下版本的中,每秒只能拨打一次。正因为如此,我们在didRangeBeacons中的代码逻辑不能按预期工作。iOS 9 didRangeBeacons多次调用。 iOS-8每秒钟一次

重现步骤:

  1. 你的任何视图控制器或AppDelegate中的,添加CLLocationManager代表。
  2. 初始化位置管理器。
  3. 开始测距 -

    [self.locationManager startRangingBeaconsInRegion:savedRegion]; 
    
  4. 只看到如何频繁didRangeBeacons获取调用。

预期结果: 应该得到所谓的每秒一次。

实际结果: 获取调用40余次每秒

版本: 的iOS 9及以上

+0

您定义并启用了多少个'Region'对象?你确定你没有每秒得到4个回调,每个区域有一个回调? iOS 8中的 – davidgyoung

+0

- 如果范围为一个区域,则每秒调用一次,如果范围为2个区域,则每秒调用两次。在iOS 9中 - 在一个区域范围内每秒调用一次。然而,当涉及2个地区 - 它变得非常难以预测。每秒几次,有时每秒20-30次。我不确定它是iOS-9的bug还是故意改变? –

+0

你看到这个iOS的确切版本?在下面的答案中看到我的测试结果无法重现9.0.2 – davidgyoung

回答

1

请务必不要在更改任何CLLocationManager属性didRangeBeacons方法。这将导致CLLocationManager再次调用didRangeBeacons,并且您将在一秒钟内完成大量更新。

我已经在'startUpdatingLocation'中体会到了这一点,但应该有结果。

+0

谢谢。帮助我进行调试。我开始在didRangeBeacons中进行位置更新,并且在didUpdateLocations中我正在重新启动范围已经不等的信标区域。因此,增加了每个重复区域(相同的UUID,标识符和主要)的RangeRaacon。 有趣的是,iOS8似乎已经考虑重复,如果它已经在一个区域范围内重新启动,则不会重新启动。 iOS9似乎没有这样做。 –

+0

酷,很高兴它确实帮助你:)这确实很有趣,为什么iOS8不同于iOS9。 –

+0

我错过了这个评论,@MadhuVSwamy。既然你已经解决了这个问题,请创建一个新的答案你自己的问题并接受它。 (您必须等待24小时,然后才能接受自己的答案。) – davidgyoung

0

听到这个报道的多个报道,我试图重现这个没有成功。对于测试设置,我创建了一个CLBeaconRegion对象并注册了它。然后,我计算回调数为didRangeBeaconsInRegion的方法,并将其除以测试开始后的秒数,以获得每秒回调的测量值。

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc]initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] identifier:@"test"]; 
[self.rangingLocationManager startRangingBeaconsInRegion: region]; 

... 

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)iBeacons inRegion:(CLBeaconRegion *)region { 
    if (startTime == nil) { 
    startTime = [[NSDate alloc] init]; 
    } 
    long secsSinceStart = -[startTime timeIntervalSinceNow]; 
    callbacks++; 
    NSLog(@"Ranging callbacks per second: %1.2f", 1.0*callbacks/secsSinceStart); 
} 

这里是我的结果从的NSLog:

IOS版本:9.0.2(13A452) 手机型号:iPod Touch的ME643LL/A

2015年10月9日17:20 :02.660 beaconTest [214:7044]每秒测距回调:1.03

IOS版本:8.3(12F69) 手机型号:iPod touch的ME978LL/A

2015年10月9日17:27:35.842 beaconTest [629:242941]测距每秒回调:1.02

,我无法重现并不意味着这个问题是不存在的事实。这可能是iOS 9的早期版本比当前可用的问题。它可能只存在于我无法测试的特定条件下。

但是,可以得出结论,并非所有9.0.2版本的iOS设备都会遇到此问题中描述的症状。

+0

只有当我们重新开始测量已经测量的区域时,您才能够对此进行模拟。为了处理暂停状态,我必须这样做。 这在iOS 8中工作正常。不知何故,iOS9将其视为一个新的区域并重新启动测距,因此重复回调。 –