Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Come faccio a eseguire il debug di null di riferimento eccezioni quando le viste vincolanti in mvvmcross


Come faccio a eseguire il debug di null di riferimento eccezioni quando le viste vincolanti in mvvmcross


Le eccezioni di riferimento NULL di debug quando le viste vincolanti in MVVMCRoss implicano diversi passaggi per identificare e risolvere il problema. Ecco una guida dettagliata su come affrontare questo problema:

1. Identifica la fonte dell'eccezione **

- Controllare la traccia dello stack: la traccia dello stack indicherà dove si sta verificando l'eccezione di riferimento nullo. Questo potrebbe essere nel tuo punto di vista, visualizza modello o all'interno di MVVMCRoss stesso.
- Problemi comuni: le fonti comuni includono servizi non registrati, modelli Null View o attacchi configurati in modo errato.

2. Verifica ViewModel e configurazione vincolante **

- ViewModel Initialization: assicurarsi che il modello di visualizzazione sia correttamente inizializzato e impostato sulla vista. In mvvmcross, questo in genere accade automaticamente, ma puoi verificarlo controllando la proprietà `ViewModel 'della tua vista.
- Configurazione di binding: assicurarsi che gli attacchi siano configurati correttamente. Utilizzare `CreateBindingSet` per definire i binding e assicurarsi che i tipi corrispondano (ad esempio,` mainview` e `mainviewmodel`).

3. Controlla i riferimenti nulli in bindings **

- Percorsi di proprietà: assicurarsi che i percorsi di proprietà nei binding siano corretti e che le proprietà esistano nel modello di visualizzazione. Ad esempio, se stai vincolando a `vm => vM.myProperty`, verifica che` myproperty` non sia nullo ed è definito correttamente.
- Inizializzazione tardiva: se le proprietà vengono inizializzate in seguito (ad esempio, in `ViewDidload`), assicurarsi che i legami vengano applicati dopo l'inizializzazione.

4. Usa l'associazione ritardata per il contenuto dinamico **

- Se stai generando dinamicamente contenuti o controlli, prendi in considerazione l'utilizzo di `DelayBind` per garantire l'applicazione dei legami dopo che la vista è stata completamente costruita. Ciò è particolarmente utile quando si lavora con controlli personalizzati o elenchi dinamici.

5. Assicurati la registrazione IOC corretta **

- Registrazione del servizio: se si utilizzano i servizi nel modello di visualizzazione, assicurarsi che siano registrati nel contenitore IOC. A questo scopo MvvMcross usa `imvxiocprovider`.
- InitializeLastChance: se si eseguono le registrazioni IOC specifiche della piattaforma, assicurati di chiamare `base.initializelastchance ()` per evitare problemi come quelli descritti in [4].

6. Problemi di vincolo personalizzati **

- Se si utilizzano attacchi personalizzati, verificare che le classi di associazione target siano correttamente implementate e registrate in `setup.cs` prevalere su` FillTargetFactories 'come mostrato in [5].

7. Tecniche di debug **

- Breakpoint: utilizzare i punti di interruzione per ispezionare lo stato del modello di visualizzazione e i legami in fase di esecuzione.
- Registrazione: abilitare la registrazione MVVMCRoss per ottenere informazioni dettagliate sulle operazioni di vincolo e potenziali errori.

8. MvxasyncCommand Problems **

- Se si utilizza `mvxasynccommand`, assicurarsi che` mvx.iocprovider` sia inizializzato prima di costruire comandi, come descritto in [1]. Questo è cruciale per gli scenari di test unitari.

Seguendo questi passaggi, dovresti essere in grado di identificare e risolvere la maggior parte delle eccezioni di riferimento nulli relative ai legami di visualizzazione in mvvmcross.

Citazioni:
[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-testing-mxvasynccommand/53618570
[2] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-ios-and-mvvmcross
[3] https://github.com/mvvmcross/mvvmcross/issues/1378
[4] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://stackoverflow.com/questions/40419789/mvvmcross-platform-exceptions-mvxexception-bindingcontext-is-null-during-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifytask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding