我正在测试Apple的AirLocate应用程序,并且对这种方法的行为有点困惑。
我的代码:
我创建了一个CLBeaconRegion并将其添加到字典中,就像一个键
self.rangedRegions = [[NSMutableDictionary alloc] init];
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc]initWithUUIDString:@"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"] identifier:@"Group 57"];
self.rangedRegions[region] = [NSArray array];
然后我开始监控和测距
for (CLBeaconRegion *region in self.rangedRegions)
{
[self.locationManager startMonitoringForRegion:region];
[self.locationManager startRangingBeaconsInRegion:region];
}
委托方法
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if(state == CLRegionStateInside)
{
NSLog(@"INSIDE REGION %@",region.identifier);
}
else if(state == CLRegionStateOutside)
{
NSLog(@"OUTSIDE REGION %@",region.identifier);
}
else
{
return;
}
}
这就是我在日志中看到的内容:
2014-11-24 16:10:42.482 AirLocate[741:60b] OUTSIDE REGION E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
2014-11-24 16:10:42.977 AirLocate[741:60b] OUTSIDE REGION Group 57
2014-11-24 16:11:31.061 AirLocate[741:60b] INSIDE REGION E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
2014-11-24 16:11:31.656 AirLocate[741:60b] INSIDE REGION Group 57
为什么此方法对CLRegionStateInside和CLRegionStateOutside都调用了两次?
为什么控制台输出UUID第一行然后输出区域的标识符?正如你在代码中看到的那样,它应该只是控制台中的region.identifier(即“Group 57”)。
答案 0 :(得分:3)
看起来你在应用程序的上一次运行中有两个不同的区域。尝试卸载并重新安装。