didRangeBeaconRegion 方法在 objective c 中给出重复的信标设备
didRangeBeaconRegion method gives repeated beacon device in objective c
我是 ibeacon 应用程序的新手,在我的应用程序中我需要找到 iBeacon device.here 我有三个信标 device.i 通过显示的 didRangeBeaconRegion method.i 找到设备这些在 table 视图中检测到的信标。
我的问题是这个方法每秒调用一次,所以我的值有重复的信标和许多数字行。
如何仅在 table 视图中显示三个信标的详细信息。
我在 android 应用程序中搜索它只显示三个信标。
下面是我的代码,
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region{
if(beacons.count>0)
{
CLBeacon *beacon=[[CLBeacon alloc]init];
beacon=[beacons firstObject];
[uuidArr addObject:beacon.proximityUUID.UUIDString];
[minArr addObject:beacon.minor];
[majArr addObject:beacon.major];
[rssiArr addObject:[NSString stringWithFormat:@"%ld",(long)beacon.rssi]];
[distanceArr addObject:[NSString stringWithFormat:@"%f m",beacon.accuracy]];
NSString *proxStr;
if (beacon.proximity == CLProximityUnknown)
{
proxStr = @"Unknown";
}
else if (beacon.proximity == CLProximityImmediate)
{
proxStr= @"Immediate";
}
else if (beacon.proximity == CLProximityNear) {
proxStr = @"Near";
}
else if (beacon.proximity == CLProximityFar) {
proxStr = @"Far";
}
[proxArr addObject:proxStr];
}
else
{
}
[self.tblView reloadData];
}
您仅将第一个对象加载到信标,因此您将获得信标数组中的第一个信标值,即如果您有 4 个信标设备,则意味着您仅获得第一个信标并且 didRangeBeacons 方法每秒调用一次,因为您添加你数组的第一个对象,比如 uuidArr,minArr 之类的,
现在的解决方案是:
1.remove if 条件上方数组中的所有值。
2.Don不只取第一个对象。
3.put 一个 for 循环来添加设备列表。
代码:
[uuidArr removeAllObjects];
[minArr removeAllObjects];
[majArr removeAllObjects];
[rssiArr removeAllObjects];
[distanceArr removeAllObjects];
[proxArr removeAllObjects];
if(beacons.count>0)
{
CLBeacon *beacon=[[CLBeacon alloc]init];
for(int i=0;i<beacons.count;i++)
{
beacon=beacons[i];
[uuidArr addObject:beacon.proximityUUID.UUIDString];
[minArr addObject:beacon.minor];
[majArr addObject:beacon.major];
[rssiArr addObject:[NSString stringWithFormat:@"%ld",(long)beacon.rssi]];
[distanceArr addObject:[NSString stringWithFormat:@"%f m",beacon.accuracy]];
NSString *proxStr;
if (beacon.proximity == CLProximityUnknown)
{
proxStr = @"Unknown";
}
else if (beacon.proximity == CLProximityImmediate)
{
proxStr= @"Immediate";
}
else if (beacon.proximity == CLProximityNear) {
proxStr = @"Near";
}
else if (beacon.proximity == CLProximityFar) {
proxStr = @"Far";
}
[proxArr addObject:proxStr];
}
}
现在你得到了你的设备数量having.i希望这对你有帮助
我是 ibeacon 应用程序的新手,在我的应用程序中我需要找到 iBeacon device.here 我有三个信标 device.i 通过显示的 didRangeBeaconRegion method.i 找到设备这些在 table 视图中检测到的信标。 我的问题是这个方法每秒调用一次,所以我的值有重复的信标和许多数字行。
如何仅在 table 视图中显示三个信标的详细信息。 我在 android 应用程序中搜索它只显示三个信标。
下面是我的代码,
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region{
if(beacons.count>0)
{
CLBeacon *beacon=[[CLBeacon alloc]init];
beacon=[beacons firstObject];
[uuidArr addObject:beacon.proximityUUID.UUIDString];
[minArr addObject:beacon.minor];
[majArr addObject:beacon.major];
[rssiArr addObject:[NSString stringWithFormat:@"%ld",(long)beacon.rssi]];
[distanceArr addObject:[NSString stringWithFormat:@"%f m",beacon.accuracy]];
NSString *proxStr;
if (beacon.proximity == CLProximityUnknown)
{
proxStr = @"Unknown";
}
else if (beacon.proximity == CLProximityImmediate)
{
proxStr= @"Immediate";
}
else if (beacon.proximity == CLProximityNear) {
proxStr = @"Near";
}
else if (beacon.proximity == CLProximityFar) {
proxStr = @"Far";
}
[proxArr addObject:proxStr];
}
else
{
}
[self.tblView reloadData];
}
您仅将第一个对象加载到信标,因此您将获得信标数组中的第一个信标值,即如果您有 4 个信标设备,则意味着您仅获得第一个信标并且 didRangeBeacons 方法每秒调用一次,因为您添加你数组的第一个对象,比如 uuidArr,minArr 之类的,
现在的解决方案是:
1.remove if 条件上方数组中的所有值。
2.Don不只取第一个对象。
3.put 一个 for 循环来添加设备列表。
代码:
[uuidArr removeAllObjects];
[minArr removeAllObjects];
[majArr removeAllObjects];
[rssiArr removeAllObjects];
[distanceArr removeAllObjects];
[proxArr removeAllObjects];
if(beacons.count>0)
{
CLBeacon *beacon=[[CLBeacon alloc]init];
for(int i=0;i<beacons.count;i++)
{
beacon=beacons[i];
[uuidArr addObject:beacon.proximityUUID.UUIDString];
[minArr addObject:beacon.minor];
[majArr addObject:beacon.major];
[rssiArr addObject:[NSString stringWithFormat:@"%ld",(long)beacon.rssi]];
[distanceArr addObject:[NSString stringWithFormat:@"%f m",beacon.accuracy]];
NSString *proxStr;
if (beacon.proximity == CLProximityUnknown)
{
proxStr = @"Unknown";
}
else if (beacon.proximity == CLProximityImmediate)
{
proxStr= @"Immediate";
}
else if (beacon.proximity == CLProximityNear) {
proxStr = @"Near";
}
else if (beacon.proximity == CLProximityFar) {
proxStr = @"Far";
}
[proxArr addObject:proxStr];
}
}
现在你得到了你的设备数量having.i希望这对你有帮助