题
如何在单触摸应用程序中存储/访问全局变量?在AppDelegate的完成方法期间,我正在检索GPS位置(使用Monotouch.CoreLocation.cllocationmanager)。然后,如何从该AppDelegate上的属性访问该信息(例如,从视图中)?还是有其他首选方法用于全局数据?
更新:我只想在启动时抓住一次位置,然后从我所有的视图中访问该位置。这是我的AppDelegate-我想从视图访问LocationManager字段。我当然可以添加一个属性来做到这一点,但是我想我的问题是“我如何从视图中访问该属性(或者我可以考虑到这是代表)”?
// The name AppDelegate is referenced in the MainWindow.xib file.
public partial class AppDelegate : UIApplicationDelegate
{
private CLLocationManager locationManager = new CLLocationManager();
// This method is invoked when the application has loaded its UI and its ready to run
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
locationManager.Delegate = new GpsLocationManagerDelegate();
locationManager.StartUpdatingLocation();
window.AddSubview (navController.View);
window.MakeKeyAndVisible ();
return true;
}
// This method is required in iPhoneOS 3.0
public override void OnActivated (UIApplication application)
{
}
}
解决方案
通常,大多数人会告诉您避免全球变量,而是将您需要的东西传递到代表中。 (我同意这种观点)。
但是,您可以使用单身顿类,服务定位器或带有静态字段/属性的静态类,以在C#(或任何其他dotnet/Mono兼容语言)中获取类似全局的可变行为。
就您而言,我认为您自己写了GPSLocationManagerDelegate班。如果是这样,您可以更改构造函数以获取必要信息的参数(视图,对应用程序委托的引用和/或对位置管理器的引用)并将其存储在您的GPSLocationManagerDelegate实例中。如果您自己不写GPSLocationManagerDelegate,并且没有被宣布为密封,请子类并创建合适的构造函数。
这个示例似乎接近您所追求的内容: http://www.conepteddevelopment.net/iphone/mapkit01/main.cs.htm
其他提示
您应该将LocationManager成为公共财产,然后您可以从应用中的大多数地方访问它:
CLLocationManager LocationManager {get;set;}
AppDelegate delegateReference =
(AppDelegate)UIApplication.SharedApplication.Delegate;
然后通过:
delegateReference.LocationManager
通常,您应该在AppDelegate中设置Singletons之类的内容。