Monotouch - глобальные переменные
-
20-09-2019 - |
Вопрос
Как я могу хранить/получить доступ к глобальным переменным в приложении 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.