didRangeBeacons方法几乎每秒在iOS 9中被调用40次。然而,在iOS 8及其以下,每秒钟只调用一次。正因为如此,我们在didRangeBeacons中的代码逻辑不像预期的那样工作。
复制步骤:
预期结果:应该每秒钟调用一次。 实际结果:每秒被呼叫超过40次
版本:iOS 9及更高版本
发布于 2015-10-07 12:47:52
确保不更改CLLocationManager方法中的任何didRangeBeacons属性。这将导致CLLocationManager再次调用didRangeBeacons,您将在一秒钟内得到大量更新。
我在“startUpdatingLocation”中经历过这种情况,但应该有结果。
发布于 2015-10-09 21:31:26
我听过多次这方面的报道后,试图复制这篇文章,但没有成功。对于测试设置,我创建了一个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-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设备都经历了这个问题中描述的症状。
https://stackoverflow.com/questions/32942945
复制相似问题