Метод задержки в MVVMcross не используется напрямую для разрешения нулевых ссылок. Вместо этого это механизм, чтобы отложить привязку представлений, пока вид не будет полностью загружен и готов. Это может косвенно помочь во избежание нулевых ссылок, гарантируя, что связывание предпринимается только тогда, когда все необходимые компоненты должным образом инициализированы.
Как работает задержка
`Задержка Bind` обычно используется в сценариях, где макет или элемент управления представления создаются динамически или загружаются асинхронно. Это позволяет вам отложить процесс привязки до тех пор, пока представление не будет полностью подготовлено, что может предотвратить попытки привязать к нулевым ссылкам.
Вот общий подход к использованию `dolembind`:
1. Настройка: По вашему мнению, вы определяете элементы пользовательского интерфейса и их привязки, используя `dolebind`. Этот метод не сразу применяет привязки; Вместо этого он планирует применять позже.
2. Просмотр подготовки: как только представление будет полностью загружен и все элементы пользовательского интерфейса инициализированы, MVVMcross автоматически применяет задержки привязки. Это гарантирует, что привязки предпринимаются только тогда, когда доступны все необходимые компоненты.
3. Применение привязки: на данный момент, если какая -либо часть пути связывания является нулевой, нулевое эталонное исключение все еще может происходить. Однако, откладывая привязку до тех пор, пока представление не будет готово, вы уменьшаете вероятность встречи с нулевыми ссылками из -за преждевременных попыток привязки.
разрешение нулевых справочных исключений
В то время как «задержка» помогает в организации и временем процесса привязки, разрешение нулевых ссылок, как правило, включает в себя обеспечение того, чтобы все объекты, участвующие в связывании, были должным образом инициализированы, прежде чем пытаться их связывать. Вот несколько стратегий, чтобы избежать нулевых ссылок: исключения:
- Убедитесь, что ViewModel установлен: убедитесь, что ViewModel правильно установлен на представлении, прежде чем пытаться привязать. Это может быть подтверждено, проверив свойство ViewModel в методах жизненного цикла View, таких как `viewdidload` для iOS или` oncreate` для Android.
- Проверьте пути привязки: убедитесь, что свойства, к которым вы привязываете в ViewModel, не являются нулевыми. Если они есть, убедитесь, что они инициализированы перед связыванием.
- Используйте защитное программирование: реализуйте проверки в вашем коде для обработки потенциальных нулевых ссылок. Это может включать использование операторов NULL-Conditional (`?
- Избегайте преждевременного привязки: используйте `Dolembind` или аналогичные механизмы, чтобы обеспечить применение привязки только тогда, когда представление и его компоненты полностью инициализированы.
Таким образом, в то время как «задержка сбит» помогает в правильном сроке процесса привязки, он напрямую не разрешает нулевые ссылки. Вместо этого он помогает организовать процесс связывания, чтобы снизить вероятность встречи с такими исключениями, обеспечивая применение привязков, когда представление будет готово.
Цитаты:[1] https://stackoverflow.com/questions/18954938/nullreference-exception-duging-dring-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/corct-use-of-delaybind-in-mvvmcross
[6] https://pvs-studio.com/en/blog/posts/csharp/1049/
[7] https://www.mvvmcross.com/documentation/fundamentals/linging
[8] https://github.com/mvvmcross/mvvmcross/issues/1508