2010-01-13 38 views
2

如何在單點觸摸應用程序中存儲/訪問全局變量?我在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

我已經根據您的示例代碼添加了一些建議。 – JasonTrue 2010-01-14 06:01:50

回答

3

一般來說,大多數人會告訴你避免全局變量,而是將你需要的東西傳遞給委託。 (我同意這種看法)。但是,您可以使用單一類,服務定位器或具有靜態字段/屬性的靜態類來獲取C#(或任何其他Dotnet/Mono兼容語言)中的類似於全局變量的行爲。

就你而言,我認爲你自己編寫了類GpsLocationManagerDelegate。如果是這樣,您可以更改構造函數以獲取必要信息的參數(視圖,對應用程序委託的引用和/或對位置管理器的引用),並將其存儲在您的GpsLocationManagerDelegate實例中。如果您沒有自己編寫GpsLocationManagerDelegate並且沒有聲明爲密封,那麼創建子類並創建適當的構造函數。

這個例子似乎接近你以後:http://www.conceptdevelopment.net/iPhone/MapKit01/Main.cs.htm

1

你應該做的LocationManager一個公共屬性,那麼你可以從很多地方訪問它的應用程序,像這樣:

CLLocationManager LocationManager {get;set;} 

AppDelegate delegateReference = 
    (AppDelegate)UIApplication.SharedApplication.Delegate; 

然後通過隨時隨地訪問的LocationManager代碼:

delegateReference.LocationManager 

一般來說,你應該設置這樣的事情在AppDelegate的內單身,安裝。