如何在我的应用程序中共享CLLocation?

时间:2011-02-16 21:21:00

标签: cocoa-touch ios ios4

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

3 个答案:

答案 0 :(得分:1)

Singletons是一种完美的Cocoa服务方式,在应用程序启动时实例化的“位置管理器”单例(或任何你选择调用它)不仅可以向需要信息的任何内容提供信息,还可以定期提供检查位置更改并向任何侦听器发送通知。

Matt Gallagher做a great job of explaining singletons on his blog,并且包含一个非常方便的宏来完成繁重的工作。

答案 1 :(得分:0)

不要将位置指定为属性,而应将CCLocationManager视为属性。相同数量的工作并使自己保持最新...每当您需要当前位置时,只需向其发送location消息。

答案 2 :(得分:0)

这是一个哲学问题。如果它只是一个小数据,那么,你的app委托中的一个命名属性是处理它的好方法。特别是如果它是应用程序的属性(就像它在物理上运行的地方)。我不介意。

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

如果我是你,我会将你所有的位置管理代码都存放在app委托本身,并将各个viewcontrollers视为委托的位置管理器的“客户”,从委托的.currentLocation中获取当前状态(或无论如何,财产都是必要的。

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