Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Πώς μπορώ να εντοπίσω εντοπισμός εξαιρέσεων αναφοράς NULL όταν δεσμεύουν τις απόψεις στο MVVMCROSS


Πώς μπορώ να εντοπίσω εντοπισμός εξαιρέσεων αναφοράς NULL όταν δεσμεύουν τις απόψεις στο MVVMCROSS


Οι εξαιρέσεις αναφοράς Null Null, όταν η δέσμευση των προβολών στο MVVMCross περιλαμβάνει διάφορα βήματα για τον εντοπισμό και την επίλυση του προβλήματος. Ακολουθεί ένας λεπτομερής οδηγός για το πώς να προσεγγίσετε αυτό το πρόβλημα:

1. Προσδιορίστε την πηγή της εξαίρεσης **

- Ελέγξτε το ίχνος στοίβας: Το ίχνος στοίβας θα υποδεικνύει πού συμβαίνει η εξαίρεση αναφοράς NULL. Αυτό θα μπορούσε να είναι κατά την άποψή σας, προβολή μοντέλου ή μέσα στο ίδιο το MVVMCROSS.
- Κοινά ζητήματα: Οι κοινές πηγές περιλαμβάνουν μη εγγεγραμμένες υπηρεσίες, μηδενικά μοντέλα προβολής ή λανθασμένα διαμορφωμένες δεσμεύσεις.

2. Επαληθεύστε το ViewModel και τη ρύθμιση δέσμευσης **

- Αρχικοποίηση ViewModel: Βεβαιωθείτε ότι το μοντέλο προβολής σας έχει αρχικοποιηθεί σωστά και ρυθμίζεται στην προβολή. Στο MVVMCROSS, αυτό συνήθως συμβαίνει αυτόματα, αλλά μπορείτε να το επαληθεύσετε ελέγχοντας την ιδιότητα "ViewModel` της προβολής σας.
- Διαμόρφωση δέσμευσης: Βεβαιωθείτε ότι οι δεσμεύσεις έχουν ρυθμιστεί σωστά. Χρησιμοποιήστε το `createBindingSet` για να καθορίσετε τις δεσμεύσεις και να βεβαιωθείτε ότι οι τύποι αντιστοιχούν (π.χ.` mainview` και `mainviewmodel ').

3. Ελέγξτε για μηδενικές αναφορές σε δεσμεύσεις **

- Διαδρομές ιδιοκτησίας: Βεβαιωθείτε ότι οι διαδρομές ιδιοκτησίας στις δεσμεύσεις σας είναι σωστές και ότι οι ιδιότητες υπάρχουν στο μοντέλο προβολής. Για παράδειγμα, εάν δεσμεύεστε σε `vm => vm.myproperty`, βεβαιωθείτε ότι το` myProperty` δεν είναι null και είναι σωστά καθορισμένο.
- καθυστερημένη αρχικοποίηση: Εάν οι ιδιότητες αρχικοποιηθούν αργότερα (π.χ. στο `ViewDidload '), βεβαιωθείτε ότι οι δεσμεύσεις εφαρμόζονται μετά την αρχικοποίηση.

4. Χρησιμοποιήστε καθυστερημένη δέσμευση για δυναμικό περιεχόμενο **

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

5. Εξασφαλίστε την κατάλληλη εγγραφή IOC **

- Εγγραφή υπηρεσιών: Εάν χρησιμοποιείτε υπηρεσίες στο μοντέλο προβολής σας, βεβαιωθείτε ότι είναι εγγεγραμμένοι στο δοχείο ΔΟΕ. Το MVVMCROSS χρησιμοποιεί `imvxiocprovider 'για το σκοπό αυτό.
- initializelastChance: Εάν κάνετε εγγραφές IOC ειδικών για την πλατφόρμα, βεβαιωθείτε ότι έχετε καλέσει `base.initializelastChance ()` για να αποφύγετε θέματα όπως αυτά που περιγράφονται στο [4].

6. Θέματα προσαρμοσμένης δέσμευσης **

- Εάν χρησιμοποιείτε προσαρμοσμένες δεσμεύσεις, βεβαιωθείτε ότι οι τάξεις δέσμευσης στόχου σας εφαρμόζονται σωστά και καταχωρούνται στο `setup.cs` με το overring` filtargetFactories` όπως φαίνεται στο [5].

7. Τεχνικές εντοπισμού σφαλμάτων **

- Σημεία διακοπής: Χρησιμοποιήστε σημεία διακοπής για να επιθεωρήσετε την κατάσταση του μοντέλου προβολής και τις δεσμεύσεις σας κατά το χρόνο εκτέλεσης.
- Καταγραφή: Ενεργοποίηση καταγραφής MVVMCROSS για να λάβετε λεπτομερείς πληροφορίες σχετικά με τις λειτουργίες δέσμευσης και τα πιθανά σφάλματα.

8.

- Εάν χρησιμοποιείτε το `mvxasynccommand`, βεβαιωθείτε ότι το` mvx.iocprovider` αρχικοποιείται πριν από την κατασκευή εντολών, όπως περιγράφεται στο [1]. Αυτό είναι κρίσιμο για τα σενάρια δοκιμών μονάδων.

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

Αναφορές:
[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-testing-mxvasynccommand/53618570
[2] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-ios-and-mvvmcross
[3] https://github.com/mvvmcross/mvvmcross/issues/1378
[4] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://stackoverflow.com/questions/40419789/mvvmcross-platform-exceptions-mvxexception-bindingcontext-is-null-during-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifytask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding