Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Melyek a nullreferenceExceptions mvvmcross -ban a leggyakoribb okai


Melyek a nullreferenceExceptions mvvmcross -ban a leggyakoribb okai


A nullreferenceExceptions általános okai az mvvmcross -ban

Az MVVMCross nullreferenceExceptions számos közös forgatókönyvből származhat, amelyek gyakran kapcsolódnak ahhoz, hogy a keret hogyan kezeli az objektumok referenciáit és a kötéseket. Íme néhány részletes magyarázat ezeknek az okoknak:

1. Inhializált objektumok vagy tulajdonságok **

A NullReferenceExceptions egyik leggyakoribb oka a nem inicializált objektumok tulajdonságainak vagy módszereinek elérése. Az MVVMCross -ban ez akkor fordulhat elő, ha egy nézetmodell vagy egy benne lévő tulajdonság nem van megfelelően beállítva, mielőtt megpróbálná a nézethez kötni. Például, ha a ViewModel tulajdonságát a kötés előtt nem inicializálják, akkor az ingatlanhoz való hozzáférés nullreferenceException -t fog dobni.

2. Helytelen NOB regisztráció **

Az MVVMCross nagymértékben támaszkodik a függőség injekciójára a NOB (a kontroll inverziója) tartályán keresztül. Ha az alkatrészeket nincs megfelelően regisztrálva a NOB -tartályban, akkor lehet, hogy nem oldják meg megfelelően, ami null referenciákhoz vezet. Ez különösen releváns a platformspecifikus regisztrációk használatakor, amint azt a beállítási osztály „InitializeLastchance” módszere látja. Ha nem hívjuk meg az alaposztály „InitializeLastChance” módszerét, akkor olyan problémákat okozhat bizonyos platformokon, mint például a Monotouch [1].

3. A kötési kontextus nem teljesen beállítva **

Az MVVMCross -ban a kötés alkalmazása előtt a kötési kontextust teljes mértékben be kell állítani. Ha a kötési kontextus nem megfelelően inicializálódik, akkor a nézetek modellek megtekintésének megkísérelése nullreferenceExceptions -t eredményezhet. Ez különösen igaz, ha a nézeteket programozottan hozza létre az XIB fájlok használata nélkül [1].

4. MVX.IOCPROVIDER NULL **

Amikor olyan parancsokat építünk, mint például a „mvxasyncCommand”, ha a „mvx.iocprovider” nulla, akkor a nullreferenceExceptions -hoz vezethet. Ez a kérdés azért merül fel, mert a NOB szolgáltatót nem kapja meg inicializálása előtt, ami gyakori probléma az egységtesztekben, ahol a NOB beállítását nem lehet teljes mértékben végrehajtani [3].

5. Null feltevési operátorok helytelen használata **

Noha nem jellemző az MVVMCross-ra, a null-feltételes operátorok (`??") Használata helytelenül vezethet nullreferenceExceptions-hoz, ha a lánc közbenső objektumok nulla. Alapvető fontosságú annak biztosítása, hogy a lánc minden részét megfelelően inicializálják, mielőtt hozzáférnének a beágyazott tulajdonságokhoz.

6. Hiányzó alaposztály -hívások **

Az MVVMCross beállítási osztályokban az alaposztály -módszerek (például a „InitializeLastCance”) meghívásának elmulasztása a szükséges összetevők hiányos inicializálásához vezethet, ami futásidejében nulla referenciákat eredményez [1].

A nullreferenceExceptions megelőzése

E kivételek elkerülése érdekében ellenőrizze, hogy minden objektum és tulajdonság megfelelően inicializálódjon a használat előtt. Ellenőrizze, hogy a NOB regisztrációk helyesek -e, és hogy az alaposztály -módszereket szükség szerint hívják. Ezenkívül a null-ellenőrzések és a nullkondicionális operátorok használata segíthet megakadályozni ezeket a kivételeket, ha elkerüli a null referenciák megsemmisítésére irányuló kísérleteket.

Idézetek:
[1] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[2] https://www.site24x7.com/learn/fixing-nullreferenceException-and-argumentNullexception.html
[3] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-stesting-mxvaynccommand/53618570
[4] https://pvs-studio.com/en/blog/posts/csharp/1049/
[5] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0
[6] https://learn.microsoft.com/en-us/answers/questions/944445/how-can-i-fix-treor-system-nullreferenceexcept
[7] https://github.com/mvvmcross/mvvmcross/issues/3115
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding