2014-02-16 2 views
0

내 프로젝트에는 장치 (iPad)와 2 개의 물리적 비콘이 관련됩니다. 그것은 내 장치가 각 비콘의 즉각적인 범위 (다른 작은 값으로)를 입력 할 때 작동하며, 특정 비컨마다 버튼이 나타납니다. 그러나 여기서 문제는 일단 beacon.proximity 조건에 if 문을 나열하면 버튼이 나타나지 않는 것입니다. 모든 도움을 주시면 감사하겠습니다!CL 근접 범위를 설정하면 왜 내 단추가 나타나지 않습니까?

-(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. 당신의 당신이로 변경 사소한 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

데이빗의 충고는 언제나 그렇듯이 좋지만, 비콘의 주 값과 부 값을 문자열로 변환하고, 문자열을 레이블에 저장 한 다음 레이블의 텍스트 내용을 조사하는 것은 권장합니다. 레이블은 뷰 객체이므로 상태 데이터를 저장하는 데 사용하면 안됩니다. 또한 문자열로 변환 한 다음 문자열을 비교하는 것은 오류가 발생하기 쉽습니다. 대신에 beacon.major 및 beacon.minor 등록 정보에서 integerValue 메소드를 사용하고 숫자 비교를 수행하십시오. –

관련 문제