Frage

Wie kann ich globale Variablen in einer Monotouch -Anwendung speichern/zugreifen? Ich rufe den GPS -Standort (mit monotouch.corelocation.cllocationManager) während der fertigen Methode des AppDelegate ab. Wie kann ich dann auf diese Informationen von einer Eigenschaft in diesem AppDelegate (zum Beispiel aus der Sicht) zugefertigte? Oder gibt es eine weitere bevorzugte Methode für globale Daten?

UPDATE: Ich möchte den Standort nur einmal beim Start schnappen und dann aus allen meinen Ansichten zugreifen. Hier ist mein AppDelegate - ich möchte aus einer Ansicht auf das Feld "LocationManager" zugreifen. Ich kann sicherlich eine Immobilie dazu hinzufügen, aber ich denke, meine Frage lautet: "Wie kann ich auf diese Eigenschaft zugreifen (oder kann ich sogar, wenn man bedenkt, dass es ein Delegierter ist)?"

// 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)
    {
    }
}
War es hilfreich?

Lösung

Im Allgemeinen werden Ihnen die meisten Menschen Ihnen sagen, dass Sie globale Variablen vermeiden und stattdessen das, was Sie brauchen, in den Delegierten übergeben. (Ich würde diesem Gefühl zustimmen).

Sie können jedoch eine Singleton-Klasse, einen Service-Locator oder eine statische Klasse mit statischen Feldern/Eigenschaften verwenden, um globales variables Verhalten in C# (oder einer anderen dotnet/mono-kompatiblen Sprache) zu erhalten.

In Ihrem Fall nehme ich an, Sie haben die Klasse GPSLocationManagerDelegate selbst geschrieben. In diesem Fall können Sie den Konstruktor so ändern, dass sie Parameter für die erforderlichen Informationen (die Ansicht, eine Referenz auf den App -Delegierten und/oder einen Verweis auf den Standortmanager) einnehmen und in Ihrer gpsLocationManagerDelegate -Instanz speichern. Wenn Sie GPSLocationManagerDelegate nicht selbst geschrieben haben und es nicht versiegelt erklärt wird, klassifizieren Sie ihn und erstellen Sie einen geeigneten Konstruktor.

Dieses Beispiel scheint dem nahe zu sein, was Sie suchen: http://www.conceptdevelopment.net/iphone/mapkit01/main.cs.htm

Andere Tipps

Sie sollten LocationManager zu einem öffentlichen Eigentum machen, dann können Sie von den meisten Orten in der App wie SO zugreifen:

CLLocationManager LocationManager {get;set;}

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

Greifen Sie dann überall in Code auf den StandortManager zu, über:

delegateReference.LocationManager

Im Allgemeinen sollten Sie Dinge wie Singletons einrichten und innerhalb des AppDelegate einrichten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top