2014-02-16 84 views
0

我的项目涉及设备(iPad)和2个物理信标。当我的设备进入每个信标的立即范围(具有不同的次要值)时,它会以某种方式工作,每个特定信标都会出现一个按钮。然而,这里的问题是,一旦我列出beacon.proximity条件的if语句,按钮就会停止显示。所有帮助表示赞赏!为什么设置CLProximity范围时我的按钮不显示?

-(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

可能存在两个问题:

  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]; 
    

相反,通过循环阵列中的所有检测到的信标,并执行相同的逻辑为每个。

最后,小心你的信标真的是直接接近遗产,并没有稍微远一点。我会为这种情况添加一个else子句并记录此条件的消息以帮助调试。

+0

David的建议一如既往,但我建议不要将灯塔的主要和次要值转换为字符串,将这些字符串存储在标签中,然后询问标签的文本内容。标签是视图对象,不应该用于保存状态数据。此外,转换为字符串,然后比较字符串是容易出错的。而是在beacon.major和beacon.minor属性上使用integerValue方法,并进行数字比较。 –

相关问题