Objective c didRangeBeaconRegion方法给出目标c中的重复信标装置

Objective c didRangeBeaconRegion方法给出目标c中的重复信标装置,objective-c,uitableview,cllocationmanager,Objective C,Uitableview,Cllocationmanager,我是ibeacon应用程序的新手,在我的应用程序中,我需要找到ibeacon设备。这里我有三个信标设备。我通过didRangeBeaconRegion方法找到该设备。我在表视图中显示了这些检测到的信标。 我的问题是这个方法每秒调用一次,所以我的值有重复的信标和许多数字行 如何仅在表视图中显示三个信标的详细信息。 我在android应用程序中搜索,它只显示了三个信标 下面是我的代码 -(void)locationManager:(CLLocationManager *)manager didRan

我是ibeacon应用程序的新手,在我的应用程序中,我需要找到ibeacon设备。这里我有三个信标设备。我通过didRangeBeaconRegion方法找到该设备。我在表视图中显示了这些检测到的信标。 我的问题是这个方法每秒调用一次,所以我的值有重复的信标和许多数字行

如何仅在表视图中显示三个信标的详细信息。 我在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.删除数组中高于if条件的所有值

2.不要只拿第一件东西

3.为循环添加一个,以添加设备列表

代码:

[uuidar removeAllObjects];
[minArr removeAllObjects];
[主要删除所有对象];
[rssiarremoveallobjects];
[distanceArr removeAllObjects];
[proxArr去除所有对象];
如果(信标计数>0)
{
CLBeacon*信标=[[CLBeacon alloc]init];

对于(int i=0;正如你所说的,只有你从信标数组中得到第一个值,但我得到了所有三个信标。是的,你可以得到你所有的信标值,例如。你有一个B C信标,它第一次得到A C B,然后C B A,然后C A B B,然后B A C C C C,这样你可以得到信标值,所以得到它。首先你可以记录信标数组,然后你很容易理解D
    [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];
        }
    }