ibeacon - 如何在 iOS、Ibeacon 上创建动态 CLBeaconRegion
问题描述
我的数据库中有两个信标的信息(Uuid、Major、Minor),我想动态创建两个 CLBeaconRegion,因为有可能添加更多信标并创建更多 CLBeaconRegion,我有以下代码:
for i in 0 ... self.ArrayBeaconIDs.count-1 {
let beaconRegion = CLBeaconRegion(
proximityUUID: UUID(uuidString: self.ArrayBeaconIDs[i])!,
major: CLBeaconMajorValue(self.ArrayMajor[i])! ,minor:CLBeaconMajorValue(self.ArrayMinor[i])!
, identifier: "teuchlitlan"
)
self.ArrayRegiones.append(beaconRegion)
}
for i in 0 ... self.ArrayRegiones.count-1 {
self.ArrayRegiones[i].notifyEntryStateOnDisplay = true
self.ArrayRegiones[i].notifyOnEntry = true
self.ArrayRegiones[i].notifyOnExit = true
self.beaconManager.startMonitoring(for: self.ArrayRegiones[i])
self.beaconManager.startRangingBeacons(in: self.ArrayRegiones[i])
self.beaconManager.requestState(for: self.ArrayRegiones[i])
}
但只检测到数组中的最后一个区域,我该如何解决?
解决方案
在测距或监控多个区域时,该identifier
字段必须设置为唯一的字符串,因为它是用于启动、停止和替换被监控区域的键。如果您尝试使用相同的identifier
字段值监视或范围两个不同的区域,则实际上将先前的区域注册替换为具有相同identifier
值的新区域。
identifier
要在您的情况下解决此问题,只需使用唯一字符串更改值。您可以像这样生成一个:
老的:
proximityUUID: UUID(uuidString: self.ArrayBeaconIDs[i])!,
major: CLBeaconMajorValue(self.ArrayMajor[i])!,
minor:CLBeaconMajorValue(self.ArrayMinor[i])!,
identifier: "teuchlitlan"
新的:
proximityUUID: UUID(uuidString: self.ArrayBeaconIDs[i])!,
major: CLBeaconMajorValue(self.ArrayMajor[i])!,
minor:CLBeaconMajorValue(self.ArrayMinor[i])!,
identifier: "teuchlitlan\(i)"
第二个代码片段将为每个区域添加一个数字后缀,identifier
因此它们是:
teuchlitlan0, teuchlitlan1, teuchlitlan2 ...等
推荐阅读
- c# - 从 RestResponse 中提取 Location 标头的最佳方法
- jwplayer - IE11 中 JWPlayer 8 上的 HLS 流式传输
- regex - vim 替换 crontab 调度部分
- mysql - 如何使用连接在mysql中使用case语句?
- html - bootstrap 3 导航栏列表项与导航栏品牌重叠
- bash - 替换 bash 和 azuredevops 类中的字符串(ios xamarin 管道)
- php - 从数据库中导入数据的方法
- sql - 在 CTE 中使用 GROUP BY 进行聚合
- java - @EnableBatchProcessing 处不满足的依赖异常
- mysql - MySQL表中的createdAt字段是否可编辑?