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)
{
}
}
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.