Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS区域监控重用项目问题_Ios_Geofencing_Clregion - Fatal编程技术网

iOS区域监控重用项目问题

iOS区域监控重用项目问题,ios,geofencing,clregion,Ios,Geofencing,Clregion,我有一个项目,在那里我使用了区域监控,取得了不同程度的成功,在大多数情况下,它是有效的,但不像我希望的那样准确,但很快发现它不应该是绝对准确的,这很好,只是物理测试很困难。尽管如此,他们还是希望在一天内完成一个完整的用户界面。这就是我所做的 我接受了旧项目,复制并重命名了它,bundle ID和all,以及我认为需要它的地方,使它本质上成为一个不同的项目。然后,我创建了一个故事板,因为我以前使用的是xib文件。然后更改了启动过程,使其使用故事板而不是预先存在的xib文件。一切都很顺利。具有新的接

我有一个项目,在那里我使用了区域监控,取得了不同程度的成功,在大多数情况下,它是有效的,但不像我希望的那样准确,但很快发现它不应该是绝对准确的,这很好,只是物理测试很困难。尽管如此,他们还是希望在一天内完成一个完整的用户界面。这就是我所做的

我接受了旧项目,复制并重命名了它,bundle ID和all,以及我认为需要它的地方,使它本质上成为一个不同的项目。然后,我创建了一个故事板,因为我以前使用的是xib文件。然后更改了启动过程,使其使用故事板而不是预先存在的xib文件。一切都很顺利。具有新的接口和基本相同的代码

问题

区域永远不会触发…永远不会,即使位置服务正在工作,因为我使用位置服务告诉我是否在一个半径范围内,但围栏回调API永远不会关闭。然后我在多个设备上测试了它。最后,其中一个被触发了……但很低,看哪,是老应用程序,它触发了fences没有问题。而新的没有。我甚至不知道我做错了什么会导致这种情况。我甚至使用了api方法,但都失败了,也成功了,它说围栏没有问题

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


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

好的,考虑到QA的详细信息,我可以想到以下几点:

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

2-当我测试didEnterRegion和DiDextRegion时,我发现无论是开车还是走路,并不总是准确无误。经过研究,我发现区域监控有一个算法,可以“确保”您在触发didEnterRegion和didExitRegion之前实际上已经越过了区域的边界。同样地,如果你的半径是100米,你从中心往一个方向走101米,并且假设它会触发迪德希特区域,那么它很可能不会发生。有时你必须步行或驾驶x米才能发射,迪登特地区也是如此。我在这里的建议是确保您始终显著超出代码中的半径

现在这变得更复杂了,如果你在这个区域内,穿过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

希望这能有所帮助。

好的,考虑到质量保证的细节,我可以想到以下几点:

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

2-当我测试didEnterRegion和DiDextRegion时,我发现无论是开车还是走路,并不总是准确无误。经过研究,我发现区域监控有一个算法,可以“确保”您在触发didEnterRegion和didExitRegion之前实际上已经越过了区域的边界。同样地,如果你的半径是100米,你从中心往一个方向走101米,并且假设它会触发迪德希特区域,那么它很可能不会发生。有时你必须步行或驾驶x米才能发射,迪登特地区也是如此。我在这里的建议是确保您始终显著超出代码中的半径

现在这变得更复杂了,如果你在这个区域内,穿过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

希望这有帮助。

所以gpx文件确实会触发防护,但在实际设备上,这不是你的意思吗?正确。这让我认为区域监测是有效的,但在现场测试中,它的表现相当糟糕。你在CLR区域使用的半径是多少?你在前台测试应用程序吗?前台和后台,区域范围从20m到1000m,正如我之前所说,昨天在旧应用程序上触发的,没有问题,但新应用程序…没有问题。此外,im使用CLRegion.not CLRegion,在iOS 7之前的版本上进行im测试,这会导致iOS 7手机出现问题吗?这里要明确的是,旧应用和新应用都在iOS 7之前的版本上进行测试