2010-01-13 8 views
2

Comment puis-je stocker/accéder aux variables globales dans une application monotouch? Je récupère l'emplacement GPS (en utilisant Monotouch.CoreLocation.CLLocationManager) pendant la méthode FinishedLaunching de l'AppDelegate. Comment puis-je accéder à cette information à partir d'une propriété sur cet appdelegate (à partir d'une vue, par exemple)? Ou existe-t-il une autre méthode préférée pour les données globales?Monotouch - variables globales

MISE À JOUR: Je veux juste saisir l'emplacement une fois, au démarrage, puis avoir accès à cet emplacement de toutes mes vues. Voici mon AppDelegate - Je voudrais accéder au champ locationManager à partir d'une vue. Je peux certainement ajouter une propriété pour le faire, mais je suppose que ma question est "Comment puis-je accéder à cette propriété à partir d'une vue (ou puis-je même, considérant qu'il s'agit d'un délégué)"?

// 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

J'ai ajouté quelques conseils basés sur votre code d'échantillon. – JasonTrue

Répondre

3

Généralement, la plupart des gens vous diront d'éviter les variables globales et de passer ce dont vous avez besoin dans le délégué. (Je suis d'accord avec ce sentiment). Toutefois, vous pouvez utiliser une classe singleton, un localisateur de service ou une classe statique avec des champs/propriétés statiques pour obtenir un comportement de type variable global en C# (ou tout autre langage compatible Dotnet/Mono).

Dans votre cas, je présume que vous avez écrit vous-même la classe GpsLocationManagerDelegate. Si c'est le cas, vous pouvez modifier le constructeur pour qu'il prenne des paramètres pour les informations nécessaires (la vue, une référence au délégué de l'application et/ou une référence au gestionnaire d'emplacement) et le stocker dans votre instance GpsLocationManagerDelegate. Si vous n'avez pas écrit GpsLocationManagerDelegate vous-même et qu'il n'est pas déclaré scellé, sous-classez-le et créez un constructeur approprié.

Cet exemple semble proche de ce que vous êtes après: http://www.conceptdevelopment.net/iPhone/MapKit01/Main.cs.htm

1

Vous devriez faire LocationManager une propriété publique, vous pouvez y accéder depuis la plupart des endroits dans l'application comme ceci:

CLLocationManager LocationManager {get;set;} 

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

puis accéder au LocationManager ne importe où dans le code via:

delegateReference.LocationManager 

en général, vous devez configurer des choses telles que les singletons, la configuration dans le AppDelegate.