Domanda

Come posso conservare / accesso variabili globali all'interno di un'applicazione MonoTouch? Sto recuperare la posizione GPS (utilizzando Monotouch.CoreLocation.CLLocationManager) durante il metodo FinishedLaunching del AppDelegate. Come posso quindi accedere a tali informazioni da una proprietà su quel AppDelegate (da una vista, per esempio)? O c'è un altro metodo preferito per i dati globale?

UPDATE: Voglio solo per afferrare la posizione una volta, in fase di avvio, quindi avere accesso a quella posizione da tutti i miei punti di vista. Ecco la mia AppDelegate - mi piacerebbe accedere al campo locationManager da una vista. Posso certamente aggiungere una proprietà di farlo, ma credo che la mia domanda è "Come accedo che la proprietà da una vista (o posso anche, considerando che è un delegato)"?

// 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)
    {
    }
}
È stato utile?

Soluzione

In generale, la maggior parte delle persone vi dirà di evitare le variabili globali e invece passare ciò che è necessario nella delegato. (Sono d'accordo con quel sentimento).

Tuttavia, è possibile utilizzare una classe Singleton, un localizzatore di servizio, o di una classe statica con campi statici / oggetti da ottenere un comportamento globale variabile come in C # (o qualsiasi altro linguaggio compatibile Dotnet / Mono).

Nel tuo caso, presumo che hai scritto la classe GpsLocationManagerDelegate da soli. Se è così, è possibile modificare il costruttore di prendere i parametri per le informazioni necessarie (la vista, un riferimento al delegato app, e / o un riferimento al location manager) e memorizzarlo nella propria istanza GpsLocationManagerDelegate. Se non hai scritto GpsLocationManagerDelegate te stesso e non è dichiarato sigillato, sottoclasse e creare un costruttore appropriato.

In questo esempio sembra vicino a quello che stai dopo: http: // www.conceptdevelopment.net/iPhone/MapKit01/Main.cs.htm

Altri suggerimenti

Si dovrebbe fare locationManager una proprietà pubblica, allora si può accedere dalla maggior parte dei luoghi in app in questo modo:

CLLocationManager LocationManager {get;set;}

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

quindi accedere alla locationmanager ovunque nel codice tramite:

delegateReference.LocationManager

In generale, è necessario impostare cose come single, l'installazione all'interno del AppDelegate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top