Налагодження NULL еталонних винятків при перевезенні перегляду в MVVMCross передбачає кілька кроків для виявлення та вирішення проблеми. Ось детальний посібник щодо того, як підійти до цієї проблеми:
1. Визначте джерело винятку **
- Перевірте слід стека: слід стека вказує, де відбувається нульовий еталонний виняток. Це може бути на ваш погляд, переглянути модель або в межах самої MVVMCross.- Загальні проблеми: загальні джерела включають незареєстровані послуги, моделі нульового перегляду або неправильно налаштовані прив’язки.
2. Перевірте налаштування ViewModel та прив’язки **
- Ініціалізація ViewModel: Переконайтесь, що ваша модель перегляду буде належним чином ініціалізована та встановлена на перегляді. У MVVMCross це зазвичай відбувається автоматично, але ви можете перевірити його, перевіривши властивість `viewModel` вашого погляду.- Конфігурація прив’язки: Переконайтесь, що прив'язки правильно налаштовані. Використовуйте `CreateBindingSet`, щоб визначити прив'язки та переконатися, що типи відповідають (наприклад,` MainView` та `MainViewModel`).
3. Перевірте наявність нульових посилань у прив’язках **
- Шляхи властивостей: Переконайтесь, що шляхи властивостей у ваших прив'язках є правильними та що властивості існують на моделі перегляду. Наприклад, якщо ви зобов’язуєтесь до `vm => vm.myproperty`, переконайтеся, що` myproperty` не є нульовим і правильно визначається.- Пізня ініціалізація: Якщо властивості ініціалізуються пізніше (наприклад, у `viewDidLoad`), переконайтеся, що після ініціалізації застосовуються зв'язки.
4. Використовуйте затримку прив’язки для динамічного вмісту **
- Якщо ви динамічно генеруєте вміст або елементи керування, подумайте про використання `delawsbind`, щоб забезпечити застосування прив’язки після повного побудованого перегляду. Це особливо корисно при роботі з користувальницькими елементами управління або динамічними списками.5. Забезпечте належну реєстрацію IOC **
- Реєстрація послуг: Якщо користуватися послугами у вашій моделі перегляду, переконайтеся, що вони зареєстровані в контейнері МОК. Mvvmcross використовує для цього `imvxiocprovider`.- InitializElastchance: Якщо робити специфічні для платформи реєстрації IOC, переконайтеся, що ви називаєте `Base.initializelastchance ()`, щоб уникнути таких проблем, як описані в [4].
6. Спеціальні проблеми з прив'язкою **
- Якщо ви використовуєте спеціальні прив’язки, переконайтеся, що ваші цільові класи прив'язки правильно реалізовані та зареєстровані в `setup.cs`, переосмислюючи` filltargetFactories`, як показано в [5].7. Методи налагодження **
- Точки перерви: Використовуйте точки перерви, щоб оглянути стан моделі вашої перегляду та прив’язки під час виконання.- Журнал: Увімкніть журнал MVVMCross, щоб отримати детальну інформацію про операції прив'язки та потенційні помилки.
8. Mvxasynccommand випуски **
- Якщо ви використовуєте `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