Metoda `delayBind` v MVVMCrossu se přímo nepoužívá k vyřešení nulových referenčních výjimek. Místo toho je to mechanismus pro zpoždění vazby pohledů, dokud není pohled plně naložen a připraven. To může nepřímo pomoci při vyhýbání se nulové referenční výjimky zajištěním, že se vazba pokusí pouze v případě, že jsou všechny nezbytné komponenty správně inicializovány.
Jak zpoždění funguje
`DelayBind` se obvykle používá ve scénářích, kde se rozložení nebo ovládací prvky pohledu vytvářejí dynamicky nebo asynchronně. Umožňuje vám zpozdit proces vazby, dokud není pohled plně připraven, což může zabránit pokusům o vázání na nulové odkazy.
Zde je obecný přístup k použití `delayBind`:
1. Nastavení: Podle vašeho názoru definujete prvky uživatelského rozhraní a jejich vazby pomocí `delayBind`. Tato metoda okamžitě nepoužívá vazby; Místo toho je naplánuje, aby byly použity později.
2. Zobrazit přípravu: Jakmile je pohled plně načten a všechny prvky uživatelského rozhraní jsou inicializovány, MVVMCross automaticky použije zpožděné vazby. Tím je zajištěno, že vazby jsou pokus o pokus pouze v případě, že jsou k dispozici všechny potřebné komponenty.
3. Vazebná aplikace: V tomto okamžiku, pokud je některá část vazebné cesty nulová, může se stále vyskytnout nulová referenční výjimka. Avšak odložením vazby, dokud není pohled připraven, snížíte pravděpodobnost setkání s nulovými odkazy kvůli pokusům o předčasné vazby.
Řešení nulových referenčních výjimek
Zatímco `DeLayBind` pomáhá při organizaci a načasování procesu vazeb, řešení nulových referenčních výjimek obvykle zahrnuje zajištění toho, aby všechny objekty zapojené do vazby byly řádně inicializovány před pokusem o jejich vázání. Zde je několik strategií, jak se vyhnout nulové referenční výjimky:
- Ujistěte se, že je nastaven ViewModel: Před pokusem o vázání se ujistěte, že ViewModel je správně nastaven na pohled. To lze ověřit kontrolou vlastnosti ViewModel v metodách životního cyklu pohledu, jako je `viewDidload` pro iOS nebo` oncreate` pro Android.
- Zkontrolujte vazebné cesty: Ověřte, že vlastnosti, na které se vážete v ViewModel, nejsou nulové. Pokud jsou, ujistěte se, že jsou inicializovány před vazbou.
- Použijte defenzivní programování: Implementujte kontroly ve svém kódu pro zpracování potenciálních nulových odkazů. To může zahrnovat použití nulových kondicionovaných operátorů (`? '`) Nebo výslovně kontrolovat null před dereferenčními objekty.
- Vyvarujte se předčasné vazby: Použijte `delayBind` nebo podobné mechanismy, abyste zajistili, že vazby jsou aplikovány pouze tehdy, pokud jsou pohled a jeho komponenty plně inicializovány.
Stručně řečeno, zatímco `delayBind` pomáhá při správném načasování vazebného procesu, nevyřeší přímo nulové referenční výjimky. Místo toho pomáhá při organizaci vazebného procesu ke snížení pravděpodobnosti setkání s těmito výjimkami tím, že zajistí, že vazby jsou aplikovány, když je pohled připraven.
Citace:[1] https://stackoverflow.com/questions/18954938/nullreference-exception-During-binding-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-sudio.com/en/blog/posts/csharp/1049/
[7] https://www.mvvmcross.com/documentation/fundamentals/linking
[8] https://github.com/mvvmcross/mvvmcross/issues/1508