如何在单触摸应用程序中存储/访问全局变量?在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之类的内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top