2017-04-17 9 views
0

私はEstimote SDKを使用してiOS 10にアプリケーションを構築しています。私は近くのビーコンを検出するためにレンジモードを使いたいと思う。リージョンとビーコンのUUIDは、小さなサンプルプロジェクトで検証されたとおりに正しくセットアップされます。RACSignal for didRangeBeacons:inRegion:not working

私が今構築しているアプリは、いくつかの奇妙な動作を示しています。beaconManager:didRangeBeacons:inRegion:のメソッドは、ビーコンのすぐ隣にあっても呼び出されません。

Bluetoothを無効/有効にすると、すぐに発砲するようになります。これは、アプリケーションを一時停止し、デバッガを使用して再開する場合も同様です。

この現象の原因は何ですか?私はすべての打ち上げ時に許可を要求しており、コールバックがモニタリングを開始するのを待っています(ドキュメントに記載されています)。私はすでに、より多くの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またはデリゲートメソッドを削除すると正常に動作します。