【问题标题】:Why do I need to store a CLLocationManager to get the users location in MKMapView?为什么我需要存储一个 CLLocationManager 来获取 MKMapView 中的用户位置?
【发布时间】:2016-05-23 18:51:32
【问题描述】:

我想通过将MKMapViewshowUserLocation属性设置为true来获取用户的位置。
如果我创建一个 CLLocationManager 并将其存储在一个属性中,它就可以正常工作。
但是,如果我不存储它,只需像这样调用requestWhenInUseAuthorization()

if locationManagerStatus != .AuthorizedWhenInUse {
    CLLocationManager().requestWhenInUseAuthorization()
}

然后它说:

Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

【问题讨论】:

  • 你是否在 plist 中添加了 NSLocationWhenInUseUsageDescription 键
  • @JP_Mob 是的,我已经添加了。
  • 看看下面的链接我认为这对你有帮助stackoverflow.com/questions/24063798/…

标签: ios swift mapkit


【解决方案1】:

CLLocationManager 必须“保持活跃”才能调用其不同的委托方法“didUpdateLocations”、“didChangeAuthorizationStatus”等。即使您不使用它们,它仍然必须存储为要使用的属性,否则它将当它假超出范围时被释放。我想这是因为它的大部分动作都是异步的。

【讨论】:

  • 我没有将我的班级设置为位置管理器的委托,所以我不知道它如何调用它的委托方法。
  • 无论哪种方式,我都不认为这是一个同步任务,所以当它超出方法的范围时,它会被释放并结束它的进程。通过将其设置为属性,它可以保持活动状态并允许完成。
猜你喜欢
  • 2011-12-12
  • 1970-01-01
  • 2016-10-25
  • 2011-01-04
  • 1970-01-01
  • 2019-10-05
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多