Metoden "Fördröjningsbind" i MVVMCross används inte direkt för att lösa undantag från nollreferenser. Istället är det en mekanism för att försena bindningen av vyer tills vyn är helt laddad och redo. Detta kan indirekt hjälpa till att undvika undantag från nollreferens genom att säkerställa att bindningen endast försöks när alla nödvändiga komponenter initialiseras korrekt.
Hur fördröjningsbind fungerar
"Fördröjningsbind" används vanligtvis i scenarier där vyens layout eller kontroller skapas dynamiskt eller laddas asynkront. Det gör att du kan försena bindningsprocessen tills vyn är fullt beredd, vilket kan förhindra försök att binda till nollreferenser.
Här är ett allmänt tillvägagångssätt för att använda `fördröjningsbind ':
1. Inställning: Enligt din åsikt definierar du UI -elementen och deras bindningar med `fördröjningsbind '. Denna metod tillämpar inte omedelbart bindningarna; Istället planerar det dem att tillämpas senare.
2. Visa beredning: När vyn är fullastad och alla UI -element initialiseras kommer MVVMCross automatiskt att tillämpa de försenade bindningarna. Detta säkerställer att bindningar endast försöks när alla nödvändiga komponenter är tillgängliga.
3. Bindningsapplikation: Vid denna tidpunkt, om någon del av bindningsvägen är NULL, kan ett undantag från nollreferens fortfarande inträffa. Men genom att försena bindningen tills vyn är klar minskar du sannolikheten för att möta nollreferenser på grund av för tidiga bindningsförsök.
Lösa undantag från nollreferens
Medan "fördröjningsbind" hjälper till att organisera och timing bindningsprocessen, innebär att lösa undantag från nollreferens vanligtvis se till att alla objekt som är involverade i bindningen initialiseras korrekt innan de försöker binda dem. Här är några strategier för att undvika undantag från nullreferens:
- Se till att ViewModel är inställd: Se till att ViewModel är korrekt inställd på vyn innan du försöker binda. Detta kan verifieras genom att kontrollera visningsmodellegenskapen i vyens livscykelmetoder som `ViewDidload` för iOS eller` onCreate` för Android.
- Kontrollera bindningsvägar: Kontrollera att de egenskaper du binder till i ViewModel inte är noll. Om de är det, se till att de initialiseras före bindning.
- Använd defensiv programmering: Implementera checkar i din kod för att hantera potentiella nollreferenser. Detta kan involvera att använda nollkonditionella operatörer (`?. ') Eller uttryckligen kontrollerar för noll innan avdragningsobjekt.
- Undvik för tidig bindning: Använd `fördröjningsbind 'eller liknande mekanismer för att säkerställa att bindningar endast appliceras när vyn och dess komponenter är helt initialiserade.
Sammanfattningsvis, medan "fördröjningsbind" hjälper till att timing bindningsprocessen korrekt, löser den inte direkt undantag från nollreferens. Istället hjälper det att organisera bindningsprocessen för att minska sannolikheten för att möta sådana undantag genom att säkerställa att bindningar tillämpas när vyn är klar.
Citeringar:[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
]
[6] https://pvs-studio.com/en/blog/posts/csharp/1049/
[7] https://www.mvvmcross.com/documentation/fundamentals/linking
[8] https://github.com/mvvmcross/mvvmcross/issues/1508