关于CLLocation Manager和多个ViewControllers的一些架构问题

时间:2009-05-18 17:53:45

标签: iphone objective-c cocoa cocoa-touch

首先,对不起,如果这个问题是愚蠢的,但我是ObjC的新手。 在我的iPhone应用程序中,我在我的唯一ViewController中有一个CLLocationManager实现,因为我只有一个View。不,我希望在我的应用程序中有更多视图,每个视图都需要CLLocationmanager的位置信息。

所以,我想我必须将实现从ViewController移到我的AppController中,因为我不想在每个ViewController中实现CLLocationManager,对吗?

但是现在,我真的不知道ViewCotrollers将如何获得位置信息?我想实现一个Singleton类,我存储信息,每个VieController都可以从那里获取信息。但是为此,我必须在ViewControllers中实现一个计时器或类似的东西,这样他们就会检查新数据是否可用。这听起来不是很好而且很糟糕。

ViewControllers如何自动获取新的位置信息?也许我需要像观察者这样的东西,但是在Cocoa / ObjC中有什么东西准备好了吗? 我认为我的申请方向错误。

非常感谢您的帮助

twickl

1 个答案:

答案 0 :(得分:4)

这是我头脑中的一个建议,可能是一个有用的起点。您认为不想在每个ViewController中重复代码来设置与CLLocationManager的连接是正确的。但是,我不会将该代码移动到您的AppController中(我假设您的意思是AppDelegate)。

我会创建一个通用的ViewController子类,并将其称为LocationAwareViewController。 LocationAwareViewController将负责创建与CLLocationManager的连接并“注册”更新。

我会将LocationAwareViewController设置为CLCLocationManager的委托。然后,LocationAwareViewController将实现部分或全部CLLocationManagerDelegate方法。现在,只要有新的位置信息,这个ViewController就会收到更新。您不必设置任何轮询计时器。

然后,每个特定的ViewControllers都将成为LocationAwareViewController的子类。他们还可以覆盖CLLocationManagerDelegate方法,为他们负责的View执行特定的操作。

一个免责声明:我还没有机会使用Core Location,所以我基于我对CLLocationManager如何单独使用文档的期望。它看起来非常简单,但也许其他人可以根据他们的经验提供更多信息。