如何在整个应用程序中共享CLLocation?

问题描述 投票:0回答:3

我正在开发一个应用程序,该应用程序具有几个使用用户当前位置的视图控制器。 由于无论我在哪个视图中,用户的当前位置都应该相同,因此我认为在视图控制器之间共享此位置是有意义的。 我应该在我的应用程序委托中定义一个CLLocation,然后设置每个视图控制器usersCurrentLocation来匹配它吗? 当一个视图控制器更新位置时,如何确保其他每个视图控制器都接受更改? 对我来说,这听起来像是一个全局变量的工作,但我知道它们并不是一种非常“可可”的工作方式。 正确的方法是什么? 代码示例将很有帮助。

cocoa-touch ios ios4
3个回答
1
投票

单例是一种完美的可可做事方式,在应用启动时实例化的“位置管理器”单例(或您选择的任何名称)不仅可以为需要该信息的任何人提供信息,还可以定期检查是否有信息。位置更改并向所有侦听器发送通知。

马特·加拉格尔(Matt Gallagher) 在他的博客上出色地解释了单例 ,并包括一个超级方便的宏,可以完成繁重的工作。


0
投票

不要将位置分配为属性,而应将CCLocationManager作为属性。 相同的工作量并保持最新状态……每当您需要当前位置时,只需向其发送location信息即可。


0
投票

这是一个哲学问题。 如果只是少量数据,那么是的,应用程序委托中的命名属性是一种很好的处理方式。 特别是如果它是应用程序的属性(例如它在物理上运行的位置)。 我不介意

数据更多,我更喜欢创建一个单例数据管理器类,因此可以全局获取它,但具有自己的名称空间。

如果我是您,那么我会将所有位置管理代码都驻留在应用程序委托本身中,并将各个视图控制器视为委托人的位置管理器的“客户端”,从委托人的.currentLocation(或其他属性)中获取当前状态。如所须。

如果您可以不时地处理一些不确定的精度,则还可以考虑使用CLLocationManager的“重大更改更新”模式,而不是使用实时GPS实时跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.