当我设置CLProximity范围时,为什么我的按钮不出现?

时间:2014-02-16 11:46:42

标签: uibutton cllocationmanager ibeacon

我的项目涉及设备(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;
        }
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

两个可能的问题:

  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;
            }
        }
    
    }
    
  2. 如果同时检测到两个信标,则只会因为此声明而对其中一个采取行动:

    beacon = [beacons lastObject];
    
  3. 相反,循环遍历阵列中所有检测到的信标,并为每个信标执行相同的逻辑。

    最后,请注意您的信标确实正在获得直接邻近区域,并且距离稍远一点。我会为这种情况添加一个else子句,并为此条件记录一条消息以帮助调试。