문제

Monotouch 애플리케이션 내에 글로벌 변수를 저장/액세스하려면 어떻게해야합니까? AppDelegate의 완성 된 방법 중에 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)
    {
    }
}
도움이 되었습니까?

해결책

일반적으로 대부분의 사람들은 글로벌 변수를 피하고 대신 대의원에 필요한 것을 전달하라고 말합니다. (나는 그 감정에 동의 할 것이다).

그러나 정적 필드/속성이있는 싱글 톤 클래스, 서비스 로케이터 또는 정적 클래스를 사용하여 C# (또는 다른 도트/모노 호환 언어)에서 글로벌 변수와 유사한 동작을 얻을 수 있습니다.

귀하의 경우, 나는 당신이 클래스 gpslocationmanagerdelegate를 직접 썼다고 가정합니다. 그렇다면 생성자를 변경하여 필요한 정보 (보기, 앱 대의원 참조 및/또는 위치 관리자에 대한 참조)에 대한 매개 변수를 가져 와서 gpslocationmanagerDelegate 인스턴스에 저장할 수 있습니다. GPSLocationManagerDelegate를 직접 작성하지 않았고 밀봉 된 선언되지 않은 경우 하위 클래식하고 적절한 생성자를 만듭니다.

이 예는 다음과 같은 것 같습니다. http://www.conceptdevelopment.net/iphone/mapkit01/main.cs.htm

다른 팁

LocationManager를 공공 자산으로 만들면 앱의 대부분의 장소에서 다음과 같은 액세스 할 수 있습니다.

CLLocationManager LocationManager {get;set;}

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

그런 다음 다음을 통해 코드의 어디서나 LocationManager에 액세스하십시오.

delegateReference.LocationManager

일반적으로 싱글 톤과 같은 것을 AppDelegate 내에서 설정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top