2010-01-13 4 views
2

monotouch 응용 프로그램 내에 전역 변수를 저장/액세스하려면 어떻게합니까? AppDelegate의 FinishedLaunching 메서드 중에 GPS 위치 (Monotouch.CoreLocation.CLLocationManager 사용)를 검색하고 있습니다. 그런 다음 appdelegate의 속성 (예 :보기)에서 해당 정보에 어떻게 액세스합니까? 아니면 글로벌 데이터에 대해 또 다른 선호되는 방법이 있습니까?Monotouch - 전역 변수

업데이트 : 시작시 한 번만 위치를 파악한 다음 내 모든보기에서 해당 위치에 액세스 할 수 있습니다. 여기 내 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를 직접 작성하지 않았고 sealed로 선언되지 않은 경우 서브 클래스로 만들고 적절한 생성자를 만듭니다.

이 예는 필요하시면 가까운 것 같다 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에 내 싱글, 설치 등의 설치와 같은 일이.