2010-01-13 5 views
2

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

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) 
    { 
    } 
} 
+0

Я добавил несколько советов, основанных на вашем примере кода. – JasonTrue

ответ

3

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

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

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

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

1

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

CLLocationManager LocationManager {get;set;} 

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

затем доступ к locationmanager где-нибудь в коде с помощью:

delegateReference.LocationManager 

в общем, вы должны настроить такие вещи, как одиночки, настройка в пределах AppDelegate.

Смежные вопросы