对于didRangeBeacons的RACSignal:inRegion:不工作

时间:2017-04-17 18:09:22

标签: ios bluetooth reactive-cocoa estimote

我正在使用Estimote SDK在iOS 10上构建应用。我想使用范围模式来检测附近的信标。在小样本项目中验证了区域和信标的UUID,并进行了验证。

我正在构建的应用程序显示出一些奇怪的行为:启动应用后,即使在信标旁边也未调用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 个答案:

答案 0 :(得分:-1)

问题是beaconManager:didRangeBeacons:inRegion:选择器对 RACSignal 的限制订阅。在没有信号的情况下删除throttle或委托方法可以正常工作。