Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kaip suderinti NULL nuorodų išimtis, kai įrišantys vaizdai MVVMCross


Kaip suderinti NULL nuorodų išimtis, kai įrišantys vaizdai MVVMCross


NUSTATYMAS NULL REFORMACIJOS IŠJUNGIMAI, kai įrišimo vaizdai MVVMCross apima kelis veiksmus, kad būtų galima nustatyti ir išspręsti problemą. Čia yra išsamus vadovas, kaip spręsti šią problemą:

1. Nurodykite išimties šaltinį **

- Patikrinkite krūvos pėdsaką: „Stack Trace“ parodys, kur įvyksta nulinės atskaitos išimtis. Tai gali būti jūsų nuomone, peržiūros modelyje arba pačiame MVVMCross.
- Bendrieji klausimai: Įprasti šaltiniai apima neregistruotas paslaugas, „Null View“ modelius arba neteisingai sukonfigūruotus įrišimus.

2. Patikrinkite „ViewModel“ ir „Binding Setup“ **

- „ViewModel“ inicijavimas: įsitikinkite, kad jūsų vaizdo modelis yra tinkamai inicijuotas ir nustatytas vaizde. „MVVMCross“ paprastai tai atsitinka automatiškai, tačiau galite tai patikrinti, patikrinę jūsų vaizdo „ViewModel“ savybę.
- Įrišimo konfigūracija: įsitikinkite, kad įrišimai yra tinkamai sukonfigūruoti. Norėdami apibrėžti įrišimus ir užtikrinkite, kad tipai atitiktų, naudokite „createBindingset“ (pvz., „MainView“ ir „MainViewModel“).

3. Patikrinkite, ar nėra jokių nuorodų įrišimus **

- Nuosavybės keliai: Įsitikinkite, kad jūsų įrišimų nuosavybės keliai yra teisingi ir ar savybės egzistuoja rodinio modelyje. Pvz., Jei esate prijungtas prie `VM => VM.MyProperty`, patikrinkite, ar„ myProperty “nėra niekinis ir teisingai apibrėžtas.
- Vėlyvas inicijavimas: jei savybės vėliau inicijuojamos (pvz., „ViewDidLoad“), įsitikinkite, kad po inicializacijos įrišimai bus taikomi.

4. Naudokite dinaminio turinio uždelstą įrišimą **

- Jei dinamiškai generuojate turinį ar valdiklius, apsvarstykite galimybę naudoti „delsiveBind“, kad įsitikintumėte, jog įrišimai taikomi po to, kai vaizdas bus visiškai sukonstruotas. Tai ypač naudinga dirbant su pasirinktiniais valdikliais ar dinaminiais sąrašais.

5. Užtikrinkite tinkamą TOC registraciją **

- Paslaugų registracija: Jei naudojate paslaugas savo vaizdo modelyje, įsitikinkite, kad jos yra įregistruotos IOC konteineryje. „Mvvmcross“ šiam tikslui naudoja „imvxiocprovider“.
- „InitizelastChance“: jei atliksite konkrečios platformos IOC registracijas, įsitikinkite, kad vadinate „Base.ItitializeLastchance ()“, kad išvengtumėte tokių klausimų kaip aprašytos [4].

6. Pasirinktinės įrišimo problemos **

- Jei naudojate pasirinktinius įrišimus, patikrinkite, ar jūsų tikslinės įrišimo klasės yra teisingai įgyvendintos ir užregistruotos „Setup.cs“, viršijant „FillTargetFactores“, kaip parodyta [5].

7. Derinimo būdai **

- „Breakpoints“: naudokite lūžio taškus, kad patikrintumėte savo vaizdo modelio būseną ir įrišimus vykdymo metu.
- registravimas: Įgalinkite „MVVMCross“ registravimą, kad gautumėte išsamią informaciją apie įrišimo operacijas ir galimas klaidas.

8. „MvxAsynccommand“ problemos **

- Jei naudojate „mvxasynccommand“, prieš konstruojant komandas, įsitikinkite, kad „mvx.iocprovider“ yra inicijuota, kaip aprašyta [1]. Tai labai svarbu atliekant vienetų testavimo scenarijus.

Atlikdami šiuos veiksmus, turėtumėte sugebėti nustatyti ir išspręsti daugumą niekinės nuorodų išimčių, susijusių su vaizdo įrišimais MVVMCross.

Citatos:
[1] https://stackoverflow.com/questions/53597908/mvvm-cross-ant-references-when-unit-testting-mxvasynccommand/53618570
[2] https://stackoverflow.com/questions/56531225/prlemlem-with-ding-to-mvxview-with-xamarin-ios-and-mvvmcross
[3] https://github.com/mvvmcross/mvvmcross/issues/1378
[4] https://stackoverflow.com/questions/18954938/nullreference-exception-during-dinging-with-mvvmcross
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://stackoverflow.com/questions/40419789/mvvmcross-platform-exceptions-svxexception-dingcontext-is-fe-null-during-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifyTask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding