didRangeBeacon在没有发现任何信标的情况下进行了调用

时间:2014-10-17 16:07:22

标签: ios ios8 core-location cllocationmanager ibeacon

我注册了自己的位置管理员来监控和范围几个信标:

[self.locationManager startMonitoringForRegion:region];
[self.locationManager startRangingBeaconsInRegion:region];

我的理解是,当找到一个或多个信标时,会调用此委托方法:

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region

当我打开我的信标时,确实调用了这个委托方法,但是信标数组是空的。是否有任何理由说明我的灯塔未列在该阵列中?

这是一个截图来说明这种情况:

enter image description here


其他注意事项:

  • 我使用MacBeacon来传输我的信标信号。我稍后会尝试使用真正的灯塔,但MacBeacon在iOS 7中一直很适合我。
  • 我尝试推迟测距,直到我调用didEnterRegion:didDetermineState:,但这仍然会导致相同的事情。
  • 我已向位置管理员请求了位置许可:[self.locationManager requestWhenInUseAuthorization];
  • 我有一个非常相似的代码,可以在Xcode 5 / iOS 7 SDK中编译。这是特定的Xcode 6 / iOS 8行为吗?
  • 我在我的plist中添加了NSLocationWhenInUseUsageDescription键。

4 个答案:

答案 0 :(得分:3)

原来这是因为我在创建CLBeaconRegion时没有使用唯一标识符。

特别感谢nayoso帮我解决这个问题。

答案 1 :(得分:1)

尝试使用iOS 8设备上的Locate app,并验证您是否看到了信标。确保将信标的UUID配置到正确定位应用程序中。

如果您确实在Locate上看到它,那么我怀疑问题是iOS 8上的应用没有正确授予权限。在这种情况下,您应该发布一个代码段,显示您调用的设置{{1并且还包含plist文件的一部分,其中需要包含以下内容:

[self.locationManager requestWhenInUseAuthorization];

答案 2 :(得分:0)

你必须首先启动信标监控,同时设置notifyEntryStateOnDisplay = YES

self.region1.notifyEntryStateOnDisplay = YES;
[theLocManager startMonitoringForRegion: region1];
[theLocManager startRangingBeaconsInRegion: region1];

在iOS 8中,该代码也适用于我。

答案 3 :(得分:0)

当我使用major和minor作为参数创建我的CLBeaconRegion时,我确实遇到了这个问题。如果您创建具有主要和次要参数的信标区域,并且没有与主要和未成年人相关的任何信标,则信标列表将为空。在我的情况下,我想动态确定主要/次要。一旦我用UUID和Identifier初始化CLBeaconRegion一切都很顺利。