Pregunta

¿Cómo puedo almacenar / acceso a variables globales dentro de una aplicación MonoTouch? Estoy recuperando el Localización GPS (usando Monotouch.CoreLocation.CLLocationManager) durante el método de la FinishedLaunching AppDelegate. ¿Cómo puedo acceder a esa información y luego de una propiedad en la que AppDelegate (desde un punto de vista, por ejemplo)? ¿O hay otro método preferido para los datos globales?

ACTUALIZACIÓN: Sólo quiero agarrar la ubicación una vez, en el inicio, a continuación, tener acceso a la ubicación de todos mis puntos de vista. Aquí está mi AppDelegate - Me gustaría tener acceso al campo locationManager desde un punto de vista. Ciertamente, puedo añadir un alojamiento a hacerlo, pero supongo que mi pregunta es "¿Cómo accedo a que la propiedad de una visión (o puede que incluso, considerando que es un delegado)"?

// 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)
    {
    }
}
¿Fue útil?

Solución

En general, la mayoría de la gente le dirá para evitar las variables globales y en lugar de pasar a lo que necesita en el delegado. (Estoy de acuerdo con ese sentimiento).

Sin embargo, se puede utilizar una clase Singleton, un localizador de servicio, o una clase estática con campos estáticos / propiedades para obtener comportamiento global variable como en C # (o cualquier otro lenguaje compatible Dotnet / Mono).

En su caso, supongo que escribió la clase GpsLocationManagerDelegate mismo. Si es así, puede cambiar el constructor para tener parámetros para la información necesaria (la vista, una referencia al delegado de la aplicación, y / o una referencia a la gerente de locación) y almacenarlo en su instancia GpsLocationManagerDelegate. Si usted no escribió GpsLocationManagerDelegate sí mismo y que no es declarada sellados, subclase y crear un constructor apropiado.

En este ejemplo se parece cerca de lo que está buscando: http: // www.conceptdevelopment.net/iPhone/MapKit01/Main.cs.htm

Otros consejos

Usted debe hacer locationManager una propiedad pública, entonces se puede acceder a él desde la mayoría de los lugares en la aplicación de esta manera:

CLLocationManager LocationManager {get;set;}

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

luego acceder a la locationmanager cualquier lugar de código a través de:

delegateReference.LocationManager

En general, deberá configurar las cosas tales como únicos, dentro de la configuración AppDelegate.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top