如何在单点触控应用程序中存储/访问全局变量?我正在 AppDelegate 的 FinishedLaunching 方法期间检索 GPS 位置(使用 Monotouch.CoreLocation.CLLocationManager)。然后,我如何从该应用程序委托(delegate)上的属性(例如,从 View )访问该信息?或者对于全局数据还有另一种首选方法吗?
更新: 我只想在启动时获取该位置一次,然后从我的所有 View 中访问该位置。这是我的 AppDelegate - 我想从 View 访问 locationManager 字段。我当然可以添加一个属性来执行此操作,但我想我的问题是“如何从 View 访问该属性(或者我什至可以,考虑到它是委托(delegate))”?
// 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)
{
}
}
最佳答案
通常,大多数人会告诉您避免全局变量,而是将您需要的内容传递给委托(delegate)。 (我同意这种观点)。
但是,您可以使用单例类、服务定位器或具有静态字段/属性的静态类来在 C#(或任何其他 Dotnet/Mono 兼容语言)中获得类似全局变量的行为。
就您而言,我认为您自己编写了 GpsLocationManagerDelegate 类。如果是这样,您可以更改构造函数以获取必要信息的参数( View 、对应用程序委托(delegate)的引用和/或对位置管理器的引用)并将其存储在 GpsLocationManagerDelegate 实例中。如果您没有自己编写 GpsLocationManagerDelegate 并且它没有声明为 seal,请对其进行子类化并创建适当的构造函数。
这个例子看起来很接近你所追求的:http://www.conceptdevelopment.net/iPhone/MapKit01/Main.cs.htm
关于xamarin.ios - Monotouch - 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059521/