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希望这对你有帮助