سؤال

كيف يمكنني تخزين/الوصول إلى المتغيرات العالمية داخل تطبيق Monotouch؟ أقوم باسترداد موقع GPS (باستخدام monotouch.corelocation.cllocationManager) خلال طريقة الانتهاء من AppDelegate. كيف يمكنني الوصول إلى هذه المعلومات من خاصية على 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).

في حالتك ، أفترض أنك كتبت class gpslocationManagerDelegate بنفسك. إذا كان الأمر كذلك ، فيمكنك تغيير المُنشئ لاتخاذ معلمات للمعلومات اللازمة (العرض ، مرجع إلى مندوب التطبيق ، و/أو إشارة إلى مدير الموقع) وتخزينه في مثيل GPSLOCATIONAGERDELEGATE الخاص بك. إذا لم تكتب gpslocationManagerDelegate بنفسك ولم يتم إعلانها مختومة ، فطائرتها الفرعية وإنشاء مُنشئ مناسب.

يبدو هذا المثال قريبًا مما أنت عليه بعد: http://www.conceptdevelopment.net/iphone/mapkit01/main.cs.htm

نصائح أخرى

يجب أن تجعل موقع LocationManager خاصية عامة ، ثم يمكنك الوصول إليها من معظم الأماكن في التطبيق مثل SO:

CLLocationManager LocationManager {get;set;}

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

ثم الوصول إلى موقع LocationManager في أي مكان في الكود عبر:

delegateReference.LocationManager

بشكل عام ، يجب عليك إعداد أشياء مثل Singletons ، والإعداد داخل AppDelegate.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top