Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Πώς συμβάλλει η μέθοδος καθυστέρησης στην επίλυση εξαιρέσεων αναφοράς μηδενικών στο MVVMCross


Πώς συμβάλλει η μέθοδος καθυστέρησης στην επίλυση εξαιρέσεων αναφοράς μηδενικών στο MVVMCross


Η μέθοδος `delaybind` στο MVVMCross δεν χρησιμοποιείται άμεσα για την επίλυση εξαιρέσεων αναφοράς μηδενικής αναφοράς. Αντ 'αυτού, είναι ένας μηχανισμός για την καθυστέρηση της δέσμευσης των προβολών έως ότου η προβολή είναι πλήρως φορτωμένη και έτοιμη. Αυτό μπορεί να βοηθήσει έμμεσα στην αποφυγή εξαιρέσεων αναφοράς μηδενικής αναφοράς, εξασφαλίζοντας ότι η δέσμευση επιχειρείται μόνο όταν όλα τα απαραίτητα συστατικά αρχικοποιηθούν σωστά.

Πώς λειτουργεί η καθυστέρηση

Το `delaybind` χρησιμοποιείται συνήθως σε σενάρια όπου η διάταξη ή τα χειριστήρια της προβολής δημιουργούνται δυναμικά ή φορτωμένα ασύγχρονα. Σας επιτρέπει να καθυστερήσετε τη διαδικασία δέσμευσης έως ότου η προβολή είναι πλήρως προετοιμασμένη, γεγονός που μπορεί να αποτρέψει τις προσπάθειες δέσμευσης με μηδενικές αναφορές.

Ακολουθεί μια γενική προσέγγιση για τη χρήση `delaybind ':

1. Ρύθμιση: Κατά την άποψή σας, ορίζετε τα στοιχεία του UI και τις δεσμεύσεις τους χρησιμοποιώντας το `delaybind '. Αυτή η μέθοδος δεν εφαρμόζει αμέσως τις συνδέσεις. Αντ 'αυτού, τους προγραμματίζει να εφαρμοστούν αργότερα.

2. Προβολή προετοιμασίας: Μόλις η προβολή είναι πλήρως φορτωμένη και όλα τα στοιχεία UI αρχικοποιηθούν, το MVVMCross θα εφαρμόσει αυτόματα τις καθυστερημένες συνδέσεις. Αυτό εξασφαλίζει ότι οι δεσμεύσεις επιχειρούνται μόνο όταν είναι διαθέσιμα όλα τα απαραίτητα στοιχεία.

3. Εφαρμογή δέσμευσης: Σε αυτό το σημείο, εάν κάποιο μέρος της διαδρομής δέσμευσης είναι μηδενική, μπορεί να συμβεί μια εξαίρεση μηδενικής αναφοράς. Ωστόσο, καθυστερώντας τη δέσμευση έως ότου η προβολή είναι έτοιμη, μειώνετε την πιθανότητα να συναντήσετε μηδενικές αναφορές λόγω πρόωρων προσπαθειών δέσμευσης.

Επίλυση εξαιρέσεων αναφοράς Null

Ενώ το `delaybind 'βοηθά στην οργάνωση και τη χρονική στιγμή της διαδικασίας δέσμευσης, η επίλυση των εξαιρέσεων αναφοράς null συνήθως περιλαμβάνει τη διασφάλιση ότι όλα τα αντικείμενα που εμπλέκονται στη δέσμευση αρχικοποιούνται σωστά πριν προσπαθήσουν να τα δεσμεύσουν. Ακολουθούν ορισμένες στρατηγικές για την αποφυγή εξαιρέσεων αναφοράς μηδενικών:

- Βεβαιωθείτε ότι το ViewModel έχει οριστεί: Βεβαιωθείτε ότι το ViewModel έχει ρυθμιστεί σωστά στην προβολή πριν επιχειρήσετε να δεσμεύσετε. Αυτό μπορεί να επαληθευτεί ελέγχοντας την ιδιότητα ViewModel στις μεθόδους ζωής της προβολής όπως το `ViewDidload 'για iOS ή` oncreate' για το Android.

- Ελέγξτε τις διαδρομές δέσμευσης: Βεβαιωθείτε ότι οι ιδιότητες που δεσμεύεστε στο ViewModel δεν είναι μηδενικές. Εάν είναι, βεβαιωθείτε ότι αρχικοποιούνται πριν από τη δέσμευση.

- Χρησιμοποιήστε αμυντικό προγραμματισμό: Εφαρμογή ελέγχων στον κωδικό σας για να χειριστείτε πιθανές αναφορές μηδενικών. Αυτό μπορεί να περιλαμβάνει τη χρήση μηδενικών χειριστών («?.») Ή ρητά έλεγχο για μηδενικά πριν από την παραίτηση από αντικείμενα.

- Αποφύγετε την πρόωρη δέσμευση: Χρησιμοποιήστε `καθυστέρηση 'ή παρόμοιους μηχανισμούς για να εξασφαλίσετε ότι οι δεσμεύσεις εφαρμόζονται μόνο όταν η προβολή και τα συστατικά της είναι πλήρως αρχικοποιημένα.

Συνοπτικά, ενώ το `delaybind` βοηθά σωστά στο χρονοδιάγραμμα της διαδικασίας δέσμευσης, δεν επιλύει άμεσα τις εξαιρέσεις αναφοράς NULL. Αντ 'αυτού, βοηθά στην οργάνωση της διαδικασίας δέσμευσης για να μειωθεί η πιθανότητα να αντιμετωπιστεί τέτοιες εξαιρέσεις, εξασφαλίζοντας ότι εφαρμόζονται δεσμεύσεις όταν η προβολή είναι έτοιμη.

Αναφορές:
[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