Metóda `DelowBind` v MVVMCross sa priamo nepoužíva na vyriešenie referenčných výnimiek s nulami. Namiesto toho je to mechanizmus na oneskorenie väzby pohľadov, až kým sa pohľad nebude úplne načítaný a pripravený. To môže nepriamo pomôcť pri vyhýbaní sa nulovým referenčným výnimkám zabezpečením pokusu o väzbu iba vtedy, keď sú všetky potrebné komponenty správne inicializované.
Ako funguje oneskorenie
`DeLEASTBind` sa zvyčajne používa v scenároch, kde sa rozloženie alebo ovládacie prvky pohľadu vytvára dynamicky alebo načítané asynchrónne. Umožňuje vám oneskoriť proces väzby, až kým nie je pohľad úplne pripravený, čo môže zabrániť pokusom o viazanie sa na nulové odkazy.
Tu je všeobecný prístup k používaniu `DeLeseBind`:
1. Nastavenie: Vo vašom pohľade definujete prvky používateľského rozhrania a ich väzby pomocou `DeLEASTBind`. Táto metóda okamžite neuplatňuje väzby; Namiesto toho ich naplánuje, aby sa uplatnili neskôr.
2. Príprava pohľadu: Po úplnom načítaní pohľadu a inicializovaní všetkých prvkov používateľského rozhrania sa MVVMCross automaticky použije oneskorené väzby. To zaisťuje, že sa viazania pokúšajú iba vtedy, keď sú k dispozícii všetky potrebné komponenty.
3. Väzbová aplikácia: V tomto bode, ak je nejaká časť väzbovej cesty nulová, môže sa stále vyskytnúť nulová referenčná výnimka. Odložením viazania však, až kým nie je pripravený pohľad, znížite pravdepodobnosť stretnutia s nulovými odkazmi v dôsledku predčasných pokusov o väzbu.
Riešenie nulových referenčných výnimiek
Zatiaľ čo „DeLeseBind“ pomáha pri organizovaní a načasovaní procesu väzby, vyriešenie nulových referenčných výnimiek zvyčajne zahŕňa zabezpečenie toho, aby všetky objekty zapojené do väzby boli správne inicializované pred pokusom o ich viazanie. Tu je niekoľko stratégií, ako sa vyhnúť nulovému referenčným výnimkám:
- Uistite sa, že je nastavená spoločnosť ViewModel: Uistite sa, že je ViewModel správne nastavený na zobrazenie pred pokusom o viazanie. Toto je možné overiť kontrolou vlastnosti ViewModel v metódach životného cyklu View, ako je „ViewDidLoad“ pre iOS alebo `onCreate` pre Android.
- Skontrolujte väzobné cesty: Overte, či vlastnosti, na ktoré ste v zábave v oblasti ViewModel, nie sú nulové. Ak sú, uistite sa, že sú inicializované pred väzbou.
- Použite defenzívne programovanie: Implementujte kontroly vo vašom kóde na spracovanie potenciálnych nulových odkazov. To môže zahŕňať použitie null-podmienených operátorov (`?.") Alebo výslovne skontrolovať NULL pred dereferenčnými objektmi.
- Vyhnite sa predčasnej väzbe: Použite „oneskorené“ alebo podobné mechanizmy na zabezpečenie väzby sa aplikujú iba vtedy, keď sú pohľad a jeho komponenty úplne inicializované.
Stručne povedané, hoci „DeLeseBind“ pomáha správne načasovanie procesu väzby, priamo nevyrieši výnimky na referenčné výnimky NULL. Namiesto toho pomáha pri organizácii väzbového procesu na zníženie pravdepodobnosti stretnutia s týmito výnimkami zabezpečením, že sa viazania uplatňujú pri pripravení pohľadu.
Citácie:[1] https://stackoverflow.com/questions/18954938/NULLREFEREFICE-EXECT-DURING-BINDING-WITH-MVVMCROS
[2] https://www.mvvmcross.com/mvvmcross-9.0.0-release/
[3] https://blog.postsharp.net/NullreferenceException-object-reference-not-tset
[4] https://www.mvvmcross.com/documentation/funmamentals/data-binding
[5] https://stackoverflow.com/questions/27925522/correct-use-of-delaybind-in-mvvvmcross
[6] https://pvs-studio.com/en/blog/posts/csharp/1049/
[7] https://www.mvvmcross.com/documentation/funmamentals/Linking
[8] https://github.com/mvvmcross/mvvmcross/issues/1508