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