如何在monotouch应用程序中存储/访问全局变量?我正在AppDelegate的FinishedLaunching方法中检索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)
{
}
}
答案 0 :(得分:3)
通常,大多数人会告诉您避免全局变量,而是将您需要的内容传递给委托。 (我同意这种观点)。
但是,您可以使用单例类,服务定位器或具有静态字段/属性的静态类来获取C#(或任何其他Dotnet / Mono兼容语言)中的全局变量行为。
在您的情况下,我假设您自己编写了GpsLocationManagerDelegate类。如果是这样,您可以更改构造函数以获取必要信息的参数(视图,对应用程序委托的引用和/或对位置管理器的引用)并将其存储在GpsLocationManagerDelegate实例中。如果您没有自己编写GpsLocationManagerDelegate并且它未声明为密封,则将其子类化并创建适当的构造函数。
这个例子似乎与你所追求的完全相同:http://www.conceptdevelopment.net/iPhone/MapKit01/Main.cs.htm
答案 1 :(得分:1)
您应该将locationManager设为公共属性,然后您可以从应用中的大多数位置访问它,如下所示:
CLLocationManager LocationManager {get;set;}
AppDelegate delegateReference =
(AppDelegate)UIApplication.SharedApplication.Delegate;
然后通过以下方式访问位置管理器:
delegateReference.LocationManager
通常,您应该在AppDelegate中设置单例,设置等内容。