Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kā metode kavēšanās palīdz NULL atsauces izņēmumu risināšanā MVVMCross


Kā metode kavēšanās palīdz NULL atsauces izņēmumu risināšanā MVVMCross


MVVMCROSS metodi “kavēšanās” netiek tieši izmantota, lai atrisinātu nulles atsauces izņēmumus. Tā vietā tas ir mehānisms, lai aizkavētu skatu saistīšanos, līdz skats ir pilnībā ielādēts un gatavs. Tas var netieši palīdzēt izvairīties no nulles atsauces izņēmumiem, nodrošinot, ka saistīšanās tiek mēģināta tikai tad, ja visi nepieciešamie komponenti tiek pareizi inicializēti.

Kā darbojas kavēšanās

`DelayBind` parasti tiek izmantots scenārijos, kad skata izkārtojums vai vadības ierīces tiek izveidotas dinamiski vai ielādētas asinhroni. Tas ļauj aizkavēt saistīšanās procesu, līdz skats nav pilnībā sagatavots, kas var novērst mēģinājumus saistīties ar nulles atsaucēm.

Šeit ir vispārīga pieeja, lai izmantotu `DELATEBIND`:

1. Iestatīšana: jūsu skatījumā jūs definējat lietotāja saskarnes elementus un to stiprinājumus, izmantojot `DelayBind`. Šī metode nekavējoties neattiecas uz iesiešanu; Tā vietā tas plāno tos piemērot vēlāk.

2. Skata sagatavošana: Kad skats ir pilnībā ielādēts un visi lietotāja saskarnes elementi ir inicializēti, MVVMCROSS automātiski piemēros aizkavētās saites. Tas nodrošina, ka iesiešanas mēģinājumi tiek mēģināti tikai tad, ja ir pieejami visi nepieciešamie komponenti.

3. Iesiešanas pielietojums: šajā brīdī, ja kāda saistošā ceļa daļa ir nulle, joprojām var rasties nulles atsauces izņēmums. Tomēr, aizkavējot iesiešanu, līdz skats ir gatavs, jūs samazināt iespējamību saskarties ar nulles atsaucēm priekšlaicīgu saistošu mēģinājumu dēļ.

NULL atsauces izņēmumu izšķiršana

Kaut arī “kavēšanās” palīdz organizēt un noteikt saistīšanās procesu, izņēmumu izņēmumi, kas saistīti ar nulli, parasti nozīmē nodrošināt, ka visi saistībā iesaistītie objekti tiek pareizi inicializēti pirms mēģinājuma tos saistīt. Šeit ir dažas stratēģijas, lai izvairītos no atsauces izņēmumiem:

- Pārliecinieties, ka ViewModel ir iestatīts: pirms mēģinājuma saistīties pārliecinieties, vai ViewModel ir pareizi iestatīts skata. To var pārbaudīt, pārbaudot ViewModel īpašumu skata dzīves cikla metodēs, piemēram, `ViewDidload` iOS vai` oncreate` Android.

- Pārbaudiet iesiešanas ceļus: pārbaudiet, vai ViewModel piesaistītās īpašības nav nulles. Ja tie ir, pārliecinieties, ka tie tiek inicializēti pirms saistīšanās.

- Izmantojiet aizsardzības programmēšanu: Ievietojiet čekus savā kodā, lai apstrādātu iespējamās nulles atsauces. Tas var ietvert nulles nosacījumu operatoru izmantošanu (`? .`) vai skaidri pārbaudot, vai nav nulles pirms objektu atcelšanas.

- Izvairieties no priekšlaicīgas saistīšanās: izmantojiet `DELACEBIND` vai līdzīgus mehānismus, lai nodrošinātu, ka iesiešana tiek piemērota tikai tad, ja skats un tā komponenti ir pilnībā inicializēti.

Rezumējot, lai gan "DelayBind" palīdz pareizi noteikt saistīšanas procesu, tas tieši neatrisina nulles atsauces izņēmumus. Tā vietā tas palīdz organizēt saistīšanās procesu, lai samazinātu iespējamību saskarties ar šādiem izņēmumiem, nodrošinot, ka iesiešana tiek piemērota, kad skats ir gatavs.

Atsauces:
[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-pet
[4] https://www.mvvmcross.com/documentation/fundamentals/data
[5] https://stackoverflow.com/questions/27925522/correct-use-of-delaybind-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