2011-02-16 48 views
0

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

回答

1

单身人士是完美的Cocoa做事方式,在应用程序启动时实例化的“位置管理器”单身人士(或任何您选择调用它的人)不仅可以将信息提供给任何需要该信息的信息,而且还可以定期检查位置更改并将通知发送给任何听众。

马特加拉格尔a great job of explaining singletons on his blog,并包括一个超级方便的宏来做繁重的工作。

0

不要将位置指定为属性,而应将CCLocationManager视为属性。同样数量的工作并保持最新状态......只要您需要当前位置,只需发送location消息即可。

0

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

更多的数据比,我更喜欢创建一个单独的数据管理器类,所以可以得到在全球范围内,但有自己的命名空间。

如果我是你,我会让你所有的位置管理代码都存在于应用程序委托本身中,并将个别viewcontrollers看作委托的位置管理器的“客户端”,从委托的.currentLocation中获取当前状态(或其他)财产。

如果你能处理不时有些玄乎的准确性,您也可以考虑使用“上显著变化更新” CLLocationManager的模式,而不是活生生的GPS跟踪。

相关问题