Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 调用didEnterRegion时不再调用didUpdateLocations_Ios_Swift_Core Location_Geofencing_Region Monitoring - Fatal编程技术网

Ios 调用didEnterRegion时不再调用didUpdateLocations

Ios 调用didEnterRegion时不再调用didUpdateLocations,ios,swift,core-location,geofencing,region-monitoring,Ios,Swift,Core Location,Geofencing,Region Monitoring,我在同时处理地理围栏和用户当前位置时遇到问题 当应用程序开始工作时,didUpdateLocations会完美地调用,我可以根据需要获得用户位置 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 但是只要调用dientereregion委托 func locationManager(_ manager: CLLocationManager, didEn

我在同时处理
地理围栏
和用户当前位置时遇到问题

当应用程序开始工作时,
didUpdateLocations
会完美地调用,我可以根据需要获得用户位置

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
但是只要调用
dientereregion
委托

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {}
didUpdateLocations
将不再触发。 他们有关系吗

我还检查了

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {}
调用
didEnterRegion
后,状态未更改。 我还添加了

locationManager?.startUpdatingLocation()
didEnterRegion
中,但仍不会调用
diupdateLocations

有人知道问题出在哪里吗? 如何跟踪区域中的位置

PS:在调用EnterRegion时自动停止更新位置,在调用ExitRegion时自动启动更新位置

更新:我使用xCode9、iOS 10和swift 4。
entereregion
ExitRegion
都是空的,我现在只是在其中打印一个日志,他们将来会将一些数据发布到服务器

didUpdateLocations将不再开火。他们有关系吗 一起

didChangeAuthorizationStatus
在这里没有意义。授权保持不变。刚刚被阻止了

正常跟踪不会对区域监控产生任何影响。这是由操作系统管理的

  • 所以,也许你的正常跟踪已经停止,因为太多的时间在后台。为避免设置为
    false
    ,默认值为
    true

  • 同时确保设置为
    true
    。从its链接:

更新仅在应用程序挂起时停止,从而防止 应用程序被唤醒以处理这些事件

我的猜测是,当你进入某个区域时,你的应用程序就不再被暂停,可以再次开始跟踪,因此你必须确保你的应用程序不会被暂停。要跟踪这一点,您可以使用
ui应用程序.shared.backgroundTimeRemaining
。看

  • 避免使用模拟器进行测试。因为应用程序的生命周期有点混乱。看见你必须断开与mac的连接并使用它,这样你才能有真正的体验
  • 一定要看清楚。它将引导您克服geofence的一些局限性,我不确定从那时起苹果有多少改进

但老实说,我仍然认为你只是犯了一个简单的错误,最终导致了你的位置跟踪停止…

好吧,我已经将
PausesLocationUpdates自动设置为false。奇怪的是,当调用
EnterRegion
时,更新位置会自动停止,当调用
ExitRegion
时,更新位置会自动开始。此外,您所说的是不可能的,即一旦调用您的dienter,您就停止跟踪。您必须以某种方式调用
stopUpdateLocation
。在整个项目中对其进行搜索。如果没有,那么你发现了一个iOS错误。你设置的距离过滤器是多少?将其设置为非常低的值,然后再试一次Init is none->
kCLDistanceFilterNone
我已对我的答案进行了编辑。由于这似乎很奇怪,我建议您分享
didEnterRegion
didexitreregion
的代码,以及执行
启动监控后的调用。还有,你在什么iOS版本上测试过这个?我已经用你的问题的答案更新了我的问题。@Mina我已经选择了50米半径,应该会发出“退出时”通知。但我在250米左右收到了通知,还有一段时间。请帮帮我。@Mina这是Geo fence退出该区域的正常行为吗?因为我已经测试了Raywendelich教程项目,它的工作原理与我的应用程序相同。在ray的应用程序中,我将半径设置为10,但我收到了250米左右的通知。