NullreferenceExceptionin yleiset syyt mvvmcrossissa
MVVMCrossin nollaReferenceSexceptions -konseptit voivat johtua useista yleisistä skenaarioista, jotka liittyvät usein siihen, kuinka Framework käsittelee objektiviitteitä ja sidoksia. Tässä on joitain yksityiskohtaisia selityksiä näistä syistä:
1.
Yksi NULLReferenceExceptionsin yleisimmistä syistä on yrittää käyttää objektien ominaisuuksia tai menetelmiä, joita ei ole alustettu. MVVMCrossissa tämä voi tapahtua, jos sen sisällä olevaa näkymä- tai omaisuutta ei ole asetettu oikein ennen kuin yritetään sitoa sitä näkymään. Esimerkiksi, jos ViewModel -ominaisuutta ei alustettu ennen sitomista, kyseisen ominaisuuden käyttäminen heittää NullReferenceException.
2. Virheellinen IOC -rekisteröinti **
MVVMCross riippuu voimakkaasti riippuvuusinjektiosta IOC: n (kontrollin inversio) säiliön kautta. Jos komponentteja ei ole rekisteröity oikein IOC -säiliöön, niitä ei ehkä ratkaista oikein, mikä johtaa nollaviitteisiin. Tämä on erityisen merkityksellistä, kun käytetään alustakohtaisia rekisteröintejä, kuten asetusluokan `alustoimitusChance` -menetelmässä nähdään. Kohdiluokan "alustuskehitys" -menetelmän soittamatta jättäminen voi aiheuttaa ongelmia tietyillä alustoilla, kuten MonoTouch [1].
3. Sidontaympäristö ei ole täysin asetettu **
MVVMCROSS: ssä sitoutumisympäristö on asetettava kokonaan ennen sidosten soveltamista. Jos sitoutumisympäristöä ei ole alustettu asianmukaisesti, näkemysten sitominen näkyviin malliin voi johtaa NullReferenceExceptioniin. Tämä pätee erityisesti, kun luodaan näkymiä ohjelmallisesti käyttämättä XIB -tiedostoja [1].
4. MVX.iocprovider on NULL **
Kun rakennetaan komentoja, kuten `mvxasyncommand`, näkymämalleihin, jos` mvx.iocprovider` on nolla, se voi johtaa nollreferenceExceptionsiin. Tämä ongelma ilmenee, koska KOK -palveluntarjoajaa ei alustettu ennen käytettyä, mikä on yleinen ongelma yksikkötesteissä, joissa KOK -asetukset eivät ehkä suoriteta kokonaan [3].
5.
Vaikka ei ole spesifistä mvvmcrossille, nolla-tilan operaattoreiden (`?") Käyttäminen voi johtaa NullreferenceExceptioniin, jos ketjun välituotteet ovat nolla. Varmistetaan, että kaikki ketjun osat alustetaan asianmukaisesti ennen sisäkkäisten ominaisuuksien pääsyä on välttämätöntä.
6. Puuttuvat perusluokkapuhelut **
MVVMCross -asetusluokissa perusluokkamenetelmien epäonnistuminen (kuten `alustusChance`) voi johtaa välttämättömien komponenttien puutteelliseen alustamiseen, mikä johtaa nollaviittauksiin suorituksen aikana [1].
NullReferenceExceptionin estäminen
Varmista, että nämä poikkeukset estävät nämä poikkeukset, että kaikki esineet ja ominaisuudet alustetaan oikein ennen käyttöä. Varmista, että KOK: n rekisteröinnit ovat oikeat ja että perusluokan menetelmät kutsutaan tarpeen mukaan. Lisäksi nollatarkastusten ja nolla-ehdollisten operaattoreiden käyttäminen voi auttaa estämään näitä poikkeuksia välttämällä yrityksiä verrattuna nollaviittauksiin.
Viittaukset:.
.
.
[4] https://pvs-studio.com/en/blog/posts/csharp/1049/
.
[6] https://learn.microsoft.com/en-us/answers/questions/944445/how-can-i-fix-the-error-system
[7] https://github.com/mvvmcross/mvvmcross/issues/3115
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding