Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Як налагодити нульові довідкові винятки при перегляді перегляду в mvvmcross


Як налагодити нульові довідкові винятки при перегляді перегляду в mvvmcross


Налагодження 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