Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kaip „DeleSeBind“ metodas padeda išspręsti niekinės nuorodos išimtis MVVMCross


Kaip „DeleSeBind“ metodas padeda išspręsti niekinės nuorodos išimtis MVVMCross


„DeAthBind“ metodas MVVMCross nėra tiesiogiai naudojamas nulinėms nuorodoms išspręsti. Vietoj to, tai yra mechanizmas, leidžiantis atidėti vaizdų surišimą, kol vaizdas bus visiškai įkeltas ir paruoštas. Tai gali netiesiogiai padėti išvengti niekinės atskaitos išimčių, užtikrinant, kad surišimas bandomas tik tada, kai visi būtini komponentai yra tinkamai inicializuojami.

Kaip veikia „DeAthBind“

„DelaingBind“ paprastai naudojamas scenarijuose, kai vaizdo išdėstymas ar valdikliai sukuriami dinamiškai arba įkeliami asinchroniškai. Tai leidžia atidėti įrišimo procesą, kol vaizdas nebus visiškai paruoštas, o tai gali užkirsti kelią bandymams prisijungti prie niekinių nuorodų.

Čia yra bendras požiūris į „delsiveBind“ naudojimą:

1. Sąranka: jūsų vaizde jūs apibrėžiate UI elementus ir jų įrišimus naudodami „delapeBind“. Šis metodas ne iš karto taiko įrišimus; Vietoj to, jis suplanuoja juos pritaikyti vėliau.

2. Vaizdo paruošimas: Kai vaizdas bus visiškai įkeltas ir bus inicijuoti visi UI elementai, „MvVMCross“ automatiškai pritaikys uždelstus įrišimus. Tai užtikrina, kad įrišimai bandomi tik tada, kai yra visi būtini komponentai.

3. Įrišimo programa: Šiuo metu, jei kuri nors surišimo kelio dalis yra nulinė, vis tiek gali įvykti niekinė atskaitos išimtis. Tačiau atidėdami įrišimą, kol vaizdas bus paruoštas, sumažinsite tikimybę susidurti su niekinės nuorodomis dėl priešlaikinio surišimo bandymų.

NULL NULL REFORMACIJOS Išimtys

Nors „delsiveBind“ padeda organizuoti ir nustatyti įrišimo procesą, nulinės atskaitos išimtys paprastai apima užtikrinimą, kad visi įrišimo objektai, susiję su įrišimu, būtų tinkamai inicijuoti prieš bandant juos surišti. Čia yra keletas strategijų, kaip išvengti niekinės nuorodų išimčių:

- Įsitikinkite, kad nustatytas „ViewModel“: prieš bandant surišti, įsitikinkite, kad „ViewModel“ yra teisingai nustatytas rodinyje. Tai galima patikrinti patikrinus „ViewModel“ ypatybę „View“ gyvenimo ciklo metodais, tokiais kaip „ViewDidload“ „iOS“ arba „oncreate“ „Android“.

- Patikrinkite įrišimo kelius: Patikrinkite, ar savybės, prie kurių esate pririšamos „ViewModel“, nėra niekinės. Jei jie yra, įsitikinkite, kad jie yra inicijuoti prieš surišdami.

- Naudokite gynybinį programavimą: Įdiekite patikrinimus savo kode, kad galėtumėte tvarkyti potencialias nulines nuorodas. Tai gali apimti nulinio kondicionierių operatorių (`? .`) Naudojimą arba aiškiai tikrinant, ar nėra nulinės, prieš panaikinant objektus.

- Venkite priešlaikinio surišimo: naudokite „delsiveBind“ ar panašius mechanizmus, kad įrišimai būtų taikomi tik tada, kai vaizdas ir jo komponentai yra visiškai inicializuoti.

Apibendrinant galima pasakyti, kad nors „delsiaBind“ padeda tinkamai nustatyti įrišimo procesą, tačiau jis tiesiogiai neišsprendžia niekinės nuorodų išimčių. Vietoj to, tai padeda organizuoti įrišimo procesą, kad sumažintų tokių išimčių tikimybę, kad užtikrintų, jog įrišimai taikomi, kai vaizdas bus paruoštas.

Citatos:
[1] https://stackoverflow.com/questions/18954938/nullreference-exception-during-inding-with-mvvmcross
[2] https://www.mvvmcross.com/mvvmcross-9.0.0-release/
[3] https://blog.postsharp.net/nullreferenceException-object-reference-not-set
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://stackoverflow.com/questions/27925522/correct-use-of-delaybind-in-mvvmcross
[6] https://pvs-sutudio.com/en/blog/posts/csharp/1049/
[7] https://www.mvvmcross.com/documentation/fundamentals/linking
[8] https://github.com/mvvmcross/mvvmcross/issues/1508