我正在使用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];
}
}
答案 0 :(得分:-1)
问题是beaconManager:didRangeBeacons:inRegion:
选择器对 RACSignal 的限制订阅。在没有信号的情况下删除throttle
或委托方法可以正常工作。