iOS区域监控重用项目问题

时间:2013-10-31 02:19:44

标签: ios geofencing clregion

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

我拿了旧项目,重复它并重命名它,捆绑ID和所有以及我认为需要它的其他地方,使它基本上是一个不同的项目。然后我创建了一个故事板,因为我之前使用的是xib文件。然后更改了启动过程,使其使用故事板而不是预先存在的xib文件。所有工作花花公子。拥有新的界面和基本相同的代码。

...问题

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

另一个棘手的问题是,如果我使用GPX文件来模拟位置,那么围栏会触发代码...我必须说的是令人沮丧的东西。

有什么建议吗?将根据需要提供代码示例。

1 个答案:

答案 0 :(得分:1)

好的,鉴于质量保证细节,我可以考虑一些事情:

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-最后,在iOS7中不推荐使用CLRegion。您需要使用CLCircularRegion。并使用以下方法启动该区域:

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

希望这有帮助。