首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 9 didRangeBeacons打了更多次电话。iOS-8是每秒一次

iOS 9 didRangeBeacons打了更多次电话。iOS-8是每秒一次
EN

Stack Overflow用户
提问于 2015-10-05 07:02:45
回答 2查看 1K关注 0票数 3

didRangeBeacons方法几乎每秒在iOS 9中被调用40次。然而,在iOS 8及其以下,每秒钟只调用一次。正因为如此,我们在didRangeBeacons中的代码逻辑不像预期的那样工作。

复制步骤:

  1. 在任何ViewController或AppDelegate中,添加CLLocationManager委托。
  2. 初始化位置管理器。
  3. 开始测距- self.locationManager startRangingBeaconsInRegion:savedRegion;
  4. 只需查看didRangeBeacons被调用的频率。

预期结果:应该每秒钟调用一次。 实际结果:每秒被呼叫超过40次

版本:iOS 9及更高版本

EN

回答 2

Stack Overflow用户

发布于 2015-10-07 12:47:52

确保不更改CLLocationManager方法中的任何didRangeBeacons属性。这将导致CLLocationManager再次调用didRangeBeacons,您将在一秒钟内得到大量更新。

我在“startUpdatingLocation”中经历过这种情况,但应该有结果。

票数 1
EN

Stack Overflow用户

发布于 2015-10-09 21:31:26

我听过多次这方面的报道后,试图复制这篇文章,但没有成功。对于测试设置,我创建了一个CLBeaconRegion对象并注册它以进行测距。然后,我计算了didRangeBeaconsInRegion方法的回调数,并将其除以测试开始测量每秒回调的秒数。

代码语言:javascript
复制
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-09 17:20:02.660信标214:7044每秒回访: 1.03

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

2015年-10-09 17:27:35.842信标629:242941远程回调每秒: 1.02

我不能复制的事实并不意味着这个问题不存在。有可能是因为iOS 9的早期版本比目前可用的版本更早。它可能只存在于我无法测试的某些条件下。

然而,可以安全地得出结论,并非所有9.0.2的iOS设备都经历了这个问题中描述的症状。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32942945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档