2017-04-17 15 views
0

Estimote SDK를 사용하여 iOS 10에 앱을 제작하고 있습니다. 나는 주변의 비컨을 탐지하기 위해 범위 모드를 사용하고 싶다. 지역 및 비콘의 UUID는 작은 샘플 프로젝트에서 확인 된대로 올바르게 설정됩니다.RACSignal for didRangeBeacons : inRegion : not working

내가 지금 짓고있는 응용 프로그램은 이상한 동작을 보이고 있습니다. 응용 프로그램을 시작한 후 beaconManager:didRangeBeacons:inRegion: 메서드는 호출 신호 옆에있는 경우에도 호출되지 않습니다.

블루투스를 사용/사용 중지하면 즉시 실행됩니다. 앱을 일시 중지하고 디버거를 사용하여 앱을 다시 시작하는 경우에도 마찬가지입니다.

어떤 문제가 있습니까? 매번 실행될 때마다 권한을 요청하고 콜백이 모니터링을 시작할 때까지 기다립니다 (설명서에 명시된대로). 나는 이미 더 많은 startRanging/stopRanging 호출 (필사적!)을 시도했지만 성공하지는 못했다.

아이디어가 있으십니까?

@implementation Model {} 

    - (instancetype)init { 
     self = [super init]; 
     if (self) { 
      self.beaconManager = [ESTBeaconManager new]; 
      self.beaconManager.delegate = self; 
      self.beaconRegion = [[CLBeaconRegion alloc] 
        initWithProximityUUID:[[NSUUID alloc] 
          initWithUUIDString:proximityUUID] 
          identifier:@"Playground"]; 
      [self.beaconManager requestWhenInUseAuthorization]; 

      self.beaconSignal = [self rac_signalForSelector:@selector(beaconManager:didRangeBeacons:inRegion:) fromProtocol:@protocol(ESTBeaconManagerDelegate)]; 

      [[self.beaconSignal throttle:1] 
        subscribeNext:^(id x) { 
         NSLog(@"Did range fired"); 

        }]; 
     } 

     return self; 
    } 

    - (void)start { 
     [self.beaconManager startRangingBeaconsInRegion:self.beaconRegion]; 
    } 

    - (void)beaconManager:(id)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
     if(status == kCLAuthorizationStatusAuthorizedWhenInUse){ 
      [self start]; 
     } 
    } 

답변

-1

문제는 beaconManager:didRangeBeacons:inRegion: 선택에 대한 RACSignal에 스로틀 가입이다. 신호없이 throttle 또는 대리자 메서드를 제거하면 정상적으로 작동합니다.