Вопрос

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

ОБНОВЛЕНИЕ: Я просто хочу захватить место один раз, при запуске, а затем получить доступ к этому месту из всех моих просмотров. Вот мой 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)
    {
    }
}
Это было полезно?

Решение

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

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

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

Этот пример кажется близким к тому, что вам нужно: http://www.conceptdevelopment.net/iphone/mapkit01/main.cs.htm

Другие советы

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

CLLocationManager LocationManager {get;set;}

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

Затем получите доступ к LocationManager в любом месте кода через:

delegateReference.LocationManager

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top