لا يتم استخدام طريقة `delaybind` في MVVMcross مباشرة لحل الاستثناءات المرجعية الفارغة. بدلاً من ذلك ، إنها آلية لتأخير ربط المشاهدات حتى يتم تحميل العرض بالكامل وجاهز. يمكن أن يساعد ذلك بشكل غير مباشر في تجنب استثناءات مرجعية فارغة من خلال ضمان محاولة الربط فقط عند تهيئة جميع المكونات اللازمة بشكل صحيح.
كيف يعمل Develbind
عادةً ما يتم استخدام "DelayBind" في السيناريوهات حيث يتم إنشاء تخطيط العرض أو عناصر التحكم ديناميكيًا أو تحميلًا بشكل غير متزامن. يتيح لك تأخير عملية الربط حتى يتم إعداد العرض بالكامل ، مما قد يمنع محاولات ربط المراجع الفارغة.
إليك نهجًا عامًا لاستخدام "Bavorbind":
1. الإعداد: في وجهة نظرك ، يمكنك تحديد عناصر واجهة المستخدم وروابطها باستخدام "DelayBind`. لا تطبق هذه الطريقة على الفور الارتباطات ؛ بدلاً من ذلك ، يحددها ليتم تطبيقها لاحقًا.
2. إعداد العرض: بمجرد تحميل العرض بالكامل ويتم تهيئة جميع عناصر واجهة المستخدم ، سيتم تطبيق MVVMCROSS تلقائيًا الروابط المتأخرة. هذا يضمن محاولة الروابط فقط عند توفر جميع المكونات اللازمة.
3. تطبيق الربط: في هذه المرحلة ، إذا كان أي جزء من مسار الربط خاليًا ، فقد لا يزال هناك استثناء مرجعي فارغ. ومع ذلك ، من خلال تأخير الربط حتى يصبح العرض جاهزًا ، فإنك تقلل من احتمال مواجهة المراجع الفارغة بسبب محاولات الربط المبكرة.
حل استثناءات مرجعية فارغة
على الرغم من أن "DelayBind" يساعد في تنظيم وتوقيت عملية الربط ، فإن حل الاستثناءات المرجعية الفارغة يتضمن عادةً ضمان تهيئة جميع الكائنات المشاركة في الربط بشكل صحيح قبل محاولة ربطها. فيما يلي بعض الاستراتيجيات لتجنب الاستثناءات المرجعية الخالية:
- تأكد من تعيين ViewModel: تأكد من تعيين ViewModel بشكل صحيح على العرض قبل محاولة الربط. يمكن التحقق من ذلك عن طريق التحقق من خاصية ViewModel في طرق دورة حياة العرض مثل "ViewDidload" لنظام التشغيل iOS أو "onCreate" لنظام Android.
- تحقق من مسارات الربط: تحقق من أن الخصائص التي ترتبط بها في ViewModel ليست فارغة. إذا كانت كذلك ، تأكد من تهيئتها قبل الربط.
- استخدم البرمجة الدفاعية: قم بتنفيذ الشيكات في الكود الخاص بك للتعامل مع المراجع الفارغة المحتملة. يمكن أن يتضمن ذلك استخدام عوامل المشغلين الفارغة ("؟
- تجنب الربط السابق لأوانه: استخدم "تأخير" أو آليات مماثلة لضمان تطبيق الارتباطات فقط عند تهيئة العرض ومكوناتها بالكامل.
باختصار ، على الرغم من أن "DelayBind" يساعد في توقيت عملية الربط بشكل صحيح ، إلا أنها لا تحل مباشرة استثناءات مرجعية فارغة. بدلاً من ذلك ، يساعد في تنظيم عملية الربط لتقليل احتمال مواجهة مثل هذه الاستثناءات من خلال التأكد من تطبيق الارتباطات عندما تكون العرض جاهزة.
الاستشهادات:[1] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[2] https://www.mvvmcross.com/mvvmcross-9.0.0-release/
[3] https://blog.postsharp.net/nullreferenceexception-object- reference-not-set
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://stackoverflow.com/questions/27925522/correct-use-of-delaybind-in-mvvmcross
[6] https://pvs-studio.com/en/blog/posts/csharp/1049/
[7] https://www.mvvmcross.com/documentation/fundamentals/linking
[8] https://github.com/mvvmcross/mvvmcross/issues/1508