Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ποιες είναι οι κοινές αιτίες των NullreferenceExceptions στο MVVMCROSS


Ποιες είναι οι κοινές αιτίες των NullreferenceExceptions στο MVVMCROSS


Κοινές αιτίες των nullreferenceExceptions στο mvvmcross

Το NullReferenceExceptions στο MVVMCross μπορεί να προκύψει από διάφορα κοινά σενάρια, που συχνά σχετίζονται με τον τρόπο με τον οποίο το πλαίσιο χειρίζεται τις αναφορές αντικειμένων και τις δεσμεύσεις. Ακολουθούν μερικές λεπτομερείς εξηγήσεις για αυτές τις αιτίες:

1. Μηνατοποιημένα αντικείμενα ή ιδιότητες **

Μία από τις πιο συνηθισμένες αιτίες των NullreferenceExceptions προσπαθεί να αποκτήσει πρόσβαση σε ιδιότητες ή μεθόδους αντικειμένων που δεν έχουν αρχικοποιηθεί. Στο MVVMCROSS, αυτό μπορεί να συμβεί εάν ένα ViewModel ή ένα ακίνητο μέσα σε αυτό δεν έχει ρυθμιστεί σωστά πριν επιχειρήσετε να το δεσμεύσετε σε μια άποψη. Για παράδειγμα, εάν η ιδιότητα του ViewModel δεν αρχικοποιηθεί πριν από τη δέσμευση, η πρόσβαση σε αυτήν την ιδιότητα θα ρίξει μια NullreferenceException.

2. Εσφαλμένη εγγραφή IOC **

Το MVVMCROSS βασίζεται σε μεγάλο βαθμό από την έγχυση εξάρτησης μέσω του δοχείου της ΔΟΕ (αναστροφής του ελέγχου). Εάν τα εξαρτήματα δεν είναι σωστά καταχωρημένα στο δοχείο ΔΟΕ, ενδέχεται να μην επιλυθούν σωστά, οδηγώντας σε μηδενικές αναφορές. Αυτό είναι ιδιαίτερα σημαντικό όταν χρησιμοποιείτε ειδικές εγγραφές στην πλατφόρμα, όπως φαίνεται στη μέθοδο `initializelastChance 'της κλάσης εγκατάστασης. Η αποτυχία να καλέσετε τη μέθοδο "InitializelastChance" της βασικής κλάσης μπορεί να προκαλέσει προβλήματα σε ορισμένες πλατφόρμες όπως το Monotouch [1].

3. Το πλαίσιο δέσμευσης δεν έχει οριστεί πλήρως **

Στο MVVMCROSS, το πλαίσιο δέσμευσης πρέπει να ρυθμιστεί πλήρως πριν από την εφαρμογή δεσμών. Εάν το πλαίσιο δέσμευσης δεν αρχικοποιηθεί σωστά, η προσπάθεια σύνδεσης των προβολών για την προβολή μοντέλων μπορεί να οδηγήσει σε NullReferenceExceptions. Αυτό ισχύει ιδιαίτερα κατά τη δημιουργία προβολών προγραμματικά χωρίς να χρησιμοποιείτε αρχεία XIB [1].

4. MVX.IOCPROVIDER είναι null **

Κατά την κατασκευή εντολών όπως το `mvxasynccommand` κατά την προβολή μοντέλων, αν το` mvx.iocprovider` είναι null, μπορεί να οδηγήσει σε nullreferenceExceptions. Αυτό το ζήτημα προκύπτει επειδή ο πάροχος ΔΟΕ δεν αρχικοποιείται πριν από τη χρήση, το οποίο αποτελεί κοινό πρόβλημα στις δοκιμές μονάδων όπου η εγκατάσταση της ΔΟΕ ενδέχεται να μην εκτελεστεί πλήρως [3].

5. Λανθασμένη χρήση των χειριστών null-conditions **

Αν και δεν είναι συγκεκριμένη για το MVVMCROSS, η χρήση μηδενικών χειριστών (`.») Μπορεί να οδηγήσει σε nullreferenceExceptions εάν τα ενδιάμεσα αντικείμενα σε μια αλυσίδα είναι null. Η εξασφάλιση ότι όλα τα μέρη της αλυσίδας έχουν αρχικοποιηθεί σωστά πριν από την πρόσβαση σε ένθετες ιδιότητες είναι ζωτικής σημασίας.

6. Λείπει κλήσεις κλάσης βάσης **

Στις κλάσεις εγκατάστασης MVVMCROSS, η μη κλήση μεθόδων βασικής κλάσης (όπως το `initializelastchance ') μπορεί να οδηγήσει σε ελλιπή αρχικοποίηση των απαραίτητων εξαρτημάτων, με αποτέλεσμα μηδενικές αναφορές κατά τη διάρκεια του χρόνου εκτέλεσης [1].

Πρόληψη της NullreferenceExceptions

Για να αποφευχθεί αυτές οι εξαιρέσεις, βεβαιωθείτε ότι όλα τα αντικείμενα και οι ιδιότητες αρχικοποιούνται σωστά πριν από τη χρήση. Βεβαιωθείτε ότι οι εγγραφές της ΔΟΕ είναι σωστές και ότι οι μέθοδοι βασικής κλάσης καλούνται ως απαραίτητες. Επιπλέον, η χρήση μηδενικών ελέγχων και μηδενικών φορέων μπορούν να βοηθήσουν στην πρόληψη αυτών των εξαιρέσεων, αποφεύγοντας τις προσπάθειες να μην αναφέρουν τις αναφορές NULL.

Αναφορές:
[1] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[2] https://www.site24x7.com/learn/fixing-nullreferenceexception-and-argumentnullexception.html
[3] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-testing-mxvasynccommand/53618570
[4] https://pvs-studio.com/en/blog/posts/csharp/1049/
[5] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0
[6] https://learn.microsoft.com/en-us/answers/questions/944445/how-can-i-fix-the-eror-system-nullreferenceepcept
[7] https://github.com/mvvmcross/mvvmcross/issues/3115
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding