Monotouch - глобальные переменные - PullRequest
2 голосов
/ 13 января 2010

Как я могу хранить / получать доступ к глобальным переменным в приложении Monotouch? Я получаю GPS-местоположение (используя Monotouch.CoreLocation.CLLocationManager) во время использования метода FinishedLaunching в AppDelegate. Как мне получить доступ к этой информации из свойства этого приложения (например, из представления)? Или есть другой предпочтительный метод для глобальных данных?

UPDATE: Я просто хочу получить местоположение один раз при запуске, а затем получить доступ к этому местоположению из всех моих просмотров. Вот мой AppDelegate - я хотел бы получить доступ к полю locationManager из представления. Я, конечно, могу добавить свойство, чтобы сделать это, но я предполагаю, что мой вопрос «Как мне получить доступ к этому свойству из представления (или я могу даже, учитывая, что это делегат)»? *

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

Ответы [ 2 ]

3 голосов
/ 13 января 2010

Как правило, большинство людей говорят вам избегать глобальных переменных и вместо этого передавать то, что вам нужно, в делегат. (Я бы согласился с этим мнением).

Однако вы можете использовать одноэлементный класс, локатор служб или статический класс со статическими полями / свойствами, чтобы получить поведение, подобное глобальной переменной, в C # (или любом другом языке, совместимом с Dotnet / Mono).

В вашем случае, я полагаю, вы сами написали класс GpsLocationManagerDelegate. Если это так, вы можете изменить конструктор так, чтобы он брал параметры для необходимой информации (представление, ссылка на делегат приложения и / или ссылку на менеджер местоположений) и сохранял его в своем экземпляре GpsLocationManagerDelegate. Если вы сами не написали GpsLocationManagerDelegate и он не объявлен запечатанным, создайте его подкласс и создайте соответствующий конструктор.

Этот пример кажется близким к тому, что вы ищете: http://www.conceptdevelopment.net/iPhone/MapKit01/Main.cs.htm

1 голос
/ 28 сентября 2011

Вы должны сделать locationManager общедоступным свойством, тогда вы можете получить к нему доступ из большинства мест в приложении следующим образом:

CLLocationManager LocationManager {get;set;}

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

, затем получить доступ к диспетчеру местоположений в любом месте кода с помощью:

delegateReference.LocationManager

Как правило, вы должны настроить такие вещи, как синглтоны, настройки в AppDelegate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...