我的项目涉及设备(iPad)和2个物理信标。当我的设备进入每个信标的直接范围(具有不同的次要值)时,它以某种方式工作,每个特定信标都会出现一个按钮。然而,这里的问题是,一旦我列出了beacon.proximity条件的if语句,按钮就会停止出现。感谢所有帮助!
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
CLBeacon *beacon = [[CLBeacon alloc] init];
beacon = [beacons lastObject];
self.majorLbl.text = [NSString stringWithFormat:@"%@", beacon.major];
self.minorLbl.text = [NSString stringWithFormat:@"%@", beacon.minor];
if ([self.majorLbl.text isEqual: @"1"])
{
if ([self.minorLbl.text isEqual:@"10"])
{
if (beacon.proximity == CLProximityImmediate)
{
_movieBtn1.hidden = NO;
}
else if ([self.minorLbl.text isEqual:@"3"])
{
if (beacon.proximity == CLProximityImmediate)
{
_movieBtn2.hidden = NO;
}
}
}
}
}
答案 0 :(得分:1)
两个可能的问题:
您的if语句不匹配,因此您永远无法检测到次要信标3.尝试将其更改为:
if ([self.majorLbl.text isEqual: @"1"])
{
if ([self.minorLbl.text isEqual:@"10"])
{
if (beacon.proximity == CLProximityImmediate)
{
_movieBtn1.hidden = NO;
}
}
else if ([self.minorLbl.text isEqual:@"3"])
{
if (beacon.proximity == CLProximityImmediate)
{
_movieBtn2.hidden = NO;
}
}
}
如果同时检测到两个信标,则只会因为此声明而对其中一个采取行动:
beacon = [beacons lastObject];
相反,循环遍历阵列中所有检测到的信标,并为每个信标执行相同的逻辑。
最后,请注意您的信标确实正在获得直接邻近区域,并且距离稍远一点。我会为这种情况添加一个else子句,并为此条件记录一条消息以帮助调试。