Debugowanie zerowych wyjątków odniesienia podczas wiązania widoków w MVVMCROSS obejmuje kilka kroków w celu zidentyfikowania i rozwiązania problemu. Oto szczegółowy przewodnik, jak podejść do tego problemu:
1. Zidentyfikuj źródło wyjątku **
- Sprawdź ślad stosu: Ślad stosu wskazuje, gdzie występuje wyjątek odniesienia zerowego. Może to być w twoim widoku, model widoku lub sam w samym MVVMCROSS.- Typowe problemy: Wspólne źródła obejmują niezarejestrowane usługi, modele zerowe lub niepoprawnie skonfigurowane powiązania.
2. Sprawdź konfigurację ViewModel i wiązania **
- Inicjalizacja ViewModel: Upewnij się, że model widoku jest odpowiednio zainicjowany i ustawiony na widoku. W MVVMCross zwykle dzieje się to automatycznie, ale możesz to zweryfikować, sprawdzając właściwość „viewModel” swojego poglądu.- Konfiguracja powiązania: Upewnij się, że powiązania są poprawnie skonfigurowane. Użyj `CreateBindingset`, aby zdefiniować powiązania i upewnić się, że typy pasują (np.„ MainView` i `MainViewModel`).
3. Sprawdź odniesienia zerowe w powiązaniach **
- Ścieżki właściwości: Upewnij się, że ścieżki właściwości w twoich powiązaniach są prawidłowe i że właściwości istnieją w modelu widoku. Na przykład, jeśli wiążysz się z `vm => vm.myProperty`, sprawdź, czy` `myProperty 'nie jest zerowa i jest poprawnie zdefiniowana.- Późna inicjalizacja: Jeśli właściwości są inicjowane później (np. W „viewdidload`) upewnij się, że powiązania są stosowane po inicjalizacji.
4. Użyj opóźnionego wiązania dla treści dynamicznej **
- Jeśli dynamicznie generujesz treść lub sterowanie, rozważ użycie „opóźnieniabind`, aby zapewnić zastosowanie powiązań po pełnym skonstruowaniu widoku. Jest to szczególnie przydatne podczas pracy z niestandardowymi elementami sterującymi lub listami dynamicznymi.5. Zapewnij odpowiednią rejestrację MKOl **
- Rejestracja usług: W przypadku korzystania z usług w modelu widoku upewnij się, że są one zarejestrowane w kontenerze MKOl. Mvvmcross używa w tym celu „imvxiocprovider”.- inicitilizelastchance: Jeśli wykonuje rejestrację MKOl specyficzną dla platformy, upewnij się, że nazywasz „base.initializelastchance ()` `, aby uniknąć problemów takich jak te opisane w [4].
6. Niestandardowe problemy z wiązaniem **
- Jeśli używasz niestandardowych powiązań, sprawdź, czy docelowe klasy wiązania są poprawnie zaimplementowane i zarejestrowane w `setup.cs` poprzez zastępowanie` FillTargetFactories` jak pokazano w [5].7. Techniki debugowania **
- Punkty przerwania: Użyj punktów przerwania, aby sprawdzić stan modelu widoku i powiązania w czasie wykonywania.- Logowanie: Włącz rejestrowanie MVVMCROSS, aby uzyskać szczegółowe informacje o operacjach wiązania i potencjalnych błędach.
8. MVXASYNCOMMAND Probleme **
- Jeśli używasz `MvxAsynCommand`, upewnij się, że` Mvx.iocprovider` jest inicjowany przed konstruowaniem poleceń, jak opisano w [1]. Ma to kluczowe znaczenie dla scenariuszy testowania jednostkowego.Postępując zgodnie z tymi krokami, powinieneś być w stanie zidentyfikować i rozwiązać większość zerowych wyjątków odniesienia związanych z wiązaniami widoku w MVVMCROSS.
Cytaty:[1] https://stackaverflow.com/questions/53597908/mvvm-cross-null-reference-hen-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://stackaverflow.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