1

我有一个项目,我在使用区域监控时取得了不同程度的成功,大部分情况下它都有效,但没有我希望的那么准确,但很快发现它不应该是完全准确的,这很好,只是物理测试这个很难。然而,他们希望在一天内完成一个完整的用户界面整体大厅。所以这就是我所做的。

我拿了旧项目,复制并重命名了它,捆绑 ID 和所有我认为需要它的地方,以使其本质上成为一个不同的项目。然后我创建了一个故事板,因为我之前使用的是 xib 文件。然后更改启动程序,使其使用情节提要而不是预先存在的 xib 文件。一切都很好。具有新的界面和基本相同的代码。

问题...

这些区域永远不会触发......永远,即使位置服务正在工作,因为我使用位置服务来告诉我我是否在一个半径范围内,但栅栏回调 API 永远不会关闭。然后我在多个设备上对其进行了测试。最后其中一个触发了......但是低并且看它是旧应用程序,它触发栅栏没问题。而新的没有。我什至无法理解我做错了什么会导致这种情况。我什至使用 api 确实失败了并且确实成功了方法,它说围栏没有问题。

另一个令人烦恼的问题是,如果我使用 GPX 文件来模拟位置,栅栏会在代码中触发……我必须说令人沮丧的事情。

有什么建议么?如果需要,将提供代码示例。

4

1 回答 1

1

好的,考虑到 QA 细节,我可以想到一些事情:

1-确保在复制项目时,您还正确复制了 .plist 并且已启用后台模式下的“位置更新”。

2- 当我测试 didEnterRegion 和 didExitRegion 时,我发现开车或步行并不总是准确的。在调查之后,我发现区域监控有一个算法可以“确保”你在触发 didEnterRegion 和 didExitRegion 之前实际上已经越过了区域的边界。因此,如果您的半径为 100 米,并且您从中心向一个方向步行 101 米并假设它会触发 didExitRegion,那么它可能不会发生。您有时必须步行或行驶另外 x 米才能启动它,对于 didEnterRegion 也是如此。我在这里的建议是确保您始终大大超出代码中的半径范围。

现在这变得更加复杂,如果您在该区域内并且您越过 100 米并返回。您可能不会得到触发,因为您从未越过(从区域监控的角度来看)一开始穿越回来的地方!

这不是 GPX 的问题,因为您正在强制划线(退出该区域),因此您不允许设备应用其算法来安全地确保您已划线。

3-确保实施:

-(void) locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

在启动时放置一些 NSLog 来确定状态。这应该有助于集中问题,并且它应该立即触发让您知道您是否在该地区或我们在该地区之外(即使没有过境)。如果这不触发,就会有更大的问题。

4- 最后,CLRegion 在 iOS7 中已弃用。您需要使用 CLCircularRegion。并使用以下方法启动区域:

initWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier

希望这可以帮助。

于 2013-10-31T07:51:50.557 回答