Metoden `DelayBind` i MVVMCROSS bruges ikke direkte til at løse nulreferencestilleder. I stedet er det en mekanisme til at forsinke bindingen af synspunkter, indtil visningen er fuldt belastet og klar. Dette kan indirekte hjælpe med at undgå nulreference undtagelser ved at sikre, at bindingen kun forsøges, når alle nødvendige komponenter initialiseres korrekt.
Hvordan DelayBind fungerer
`DelayBind` bruges typisk i scenarier, hvor visningens layout eller kontrol er skabt dynamisk eller indlæst asynkront. Det giver dig mulighed for at udsætte bindingsprocessen, indtil visningen er fuldt forberedt, hvilket kan forhindre forsøg på at binde til nul referencer.
Her er en generel tilgang til at bruge 'DelayBind':
1. opsætning: Efter din opfattelse definerer du UI -elementerne og deres bindinger ved hjælp af 'DelayBind'. Denne metode anvender ikke straks bindingerne; I stedet planlægger det dem, der skal anvendes senere.
2. Vis forberedelse: Når visningen er fuldt indlæst, og alle UI -elementer er initialiseret, anvender MVVMCross automatisk de forsinkede bindinger. Dette sikrer, at bindinger kun forsøges, når alle nødvendige komponenter er tilgængelige.
3. bindende anvendelse: På dette tidspunkt, hvis en del af bindingsstien er null, kan der stadig forekomme en nulreferencesception. Ved at udsætte bindingen, indtil visningen er klar, reducerer du imidlertid sandsynligheden for at møde nulhenvisninger på grund af for tidlige bindingsforsøg.
Løsning af nulreferencesundtagelser
Mens `DelayBind` hjælper med at organisere og timere bindingsprocessen, involverer løsning af nulreference undtagelser typisk at sikre, at alle objekter, der er involveret i bindingen, initialiseres korrekt, før de forsøger at binde dem. Her er nogle strategier for at undgå undtagelser fra nulreferencer:
- Sørg for, at ViewModel er indstillet: Sørg for, at ViewModel er korrekt indstillet på visningen, før du forsøger at binde. Dette kan verificeres ved at kontrollere egenskaben ViewModel i visningens livscyklusmetoder som 'ViewDidLoad' til iOS eller 'OnCreate' til Android.
- Kontroller bindende stier: Kontroller, at de egenskaber, du binder til i ViewModel, ikke er nul. Hvis de er, skal du sikre dig, at de initialiseres inden binding.
- Brug defensiv programmering: Implementere kontroller i din kode til at håndtere potentielle nulreferencer. Dette kan involvere anvendelse af nul-betingede operatører (`?
- Undgå for tidlig binding: Brug `DelayBind` eller lignende mekanismer til at sikre, at bindinger kun anvendes, når visningen og dens komponenter er fuldt initialiserede.
Sammenfattende, mens `DelayBind` hjælper med at timere bindingsprocessen korrekt, løser den ikke direkte nulreferencestilleder. I stedet hjælper det med at organisere bindingsprocessen for at reducere sandsynligheden for at møde sådanne undtagelser ved at sikre, at bindinger anvendes, når visningen er klar.
Citater:[1] https://stackoverflow.com/questions/18954938/nullreference-exception-ception-during-bindende-with-mvvmcross
[2] https://www.mvvmcross.com/mvvmcross-9.0.0-release/
[3] https://blog.postsharp.net/nullreferencexception-object-reference-not-set
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://stackoverflow.com/questions/27925522/correct-ify-felaybind-in-mvvmcross
[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