Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hogyan hibakereshetem a null referencia -kivételeket, ha a nézeteket az mvvmcross -ban kötik


Hogyan hibakereshetem a null referencia -kivételeket, ha a nézeteket az mvvmcross -ban kötik


A null referencia -kivételek hibakeresése, ha az MVVMCross -ban a kötési nézetek több lépést tartalmaznak a probléma azonosítására és megoldására. Itt található egy részletes útmutató a probléma megközelítéséhez:

1. Határozza meg a kivétel forrását **

- Ellenőrizze a verem nyomkövetését: A verem nyomkövetése jelzi, hogy hol fordul elő a null referencia -kivétel. Ez lehet az ön véleménye, a modell vagy az mvvmcross -ban.
- Általános kérdések: Általános források közé tartozik a nem regisztrált szolgáltatások, a null nézetmodellek vagy a helytelenül konfigurált kötések.

2. Ellenőrizze a ViewModel és a kötési beállítást **

- ViewModel inicializálás: Győződjön meg arról, hogy a nézetmodell megfelelően inicializálódik, és beállítsa a nézetbe. Az MVVMCross -ban ez általában automatikusan megtörténik, de ellenőrizheti azt nézetének „ViewModel” tulajdonságának ellenőrzésével.
- Kötési konfiguráció: Győződjön meg arról, hogy a kötések helyesen vannak -e konfigurálva. Használja a `createBindingset` használatát a kötések meghatározásához és annak biztosítása érdekében, hogy a típusok megegyezjenek (például:„ MainView ”és„ MainViewModel ”).

3. Ellenőrizze, hogy vannak -e null referenciák a kötésekben **

- Tulajdonságok útjai: Győződjön meg arról, hogy a kötésekben szereplő tulajdonságok helyesek -e, és hogy a tulajdonságok létezjenek a nézetmodellben. Például, ha kötődik a „Vm => V.MyProperty” -re, ellenőrizze, hogy a „MyProperty” nincs -e nulla, és helyesen van -e meghatározva.
- Késő inicializálás: Ha a tulajdonságokat később inicializálják (például a „ViewDidload” -ben), akkor ügyeljen arra, hogy a kötéseket az inicializálás után alkalmazzák.

4. Használjon késleltetett kötést a dinamikus tartalomhoz **

- Ha dinamikusan generál tartalmat vagy ellenőrzést, akkor fontolja meg a „késleltetésű” használatát annak biztosítása érdekében, hogy a kötéseket a nézet teljes kialakítása után alkalmazzák. Ez különösen akkor hasznos, ha az egyedi vezérlőkkel vagy a dinamikus listákkal dolgozik.

5. Gondoskodjon a megfelelő NOB regisztrációról **

. Az MVVMCross erre a célra használja az iMvxiocprovider -t.
- InitializeLastCance: Ha platformspecifikus NOB regisztrációt végez, akkor ügyeljen arra, hogy a „base.initializeLastchance ()” hívja, hogy elkerülje a [4] -ben leírt kérdéseket.

6. Egyéni kötési kérdések **

- Ha egyedi kötéseket használ, ellenőrizze, hogy a célkötési osztályokat helyesen hajtják végre és regisztrálják -e a `setup.cs" -ben, a „FilltargetFactors” felülbírálásával, amint azt az [5] mutatja.

7. hibakeresési technikák **

- Breakpoints: Használjon töréspontokat a nézetmodell és a kötések állapotának ellenőrzéséhez futásidejében.
- Naplózás: Engedélyezze az MVVMCross naplózást, hogy részletes információkat szerezzen a kötési műveletekről és a lehetséges hibákról.

8.

- Ha az `mvxasyncCommand` használja, akkor ügyeljen arra, hogy a„ mvx.iocprovider ”inicializálódjon a parancsok készítése előtt, az [1] -ben leírtak szerint. Ez elengedhetetlen az egységteszt -tesztelési forgatókönyvekhez.

Ezeknek a lépéseknek a követésével képesnek kell lennie arra, hogy azonosítsa és megoldja a legtöbb null referencia -kivételt az MVVMCross -ban lévő kötésekkel kapcsolatban.

Idézetek:
[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-stesting-mxvaynccommand/53618570
[2] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-os-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