MVVMCross의 'DelayBind'방법은 NULL 참조 예외를 해결하는 데 직접 사용되지 않습니다. 대신, 뷰가 완전히로드되고 준비 될 때까지 뷰의 결합을 지연시키는 메커니즘입니다. 이는 필요한 모든 구성 요소가 올바르게 초기화 될 때만 바인딩이 시도되는지 확인하여 NULL 참조 예외를 피하는 데 간접적으로 도움이 될 수 있습니다.
Delaybind가 작동하는 방법
`DelayBind '는 일반적으로 뷰의 레이아웃 또는 컨트롤이 동적으로 또는 비동기로로드되는 시나리오에서 사용됩니다. 뷰가 완전히 준비 될 때까지 바인딩 프로세스를 지연시켜 널 참조에 결합하려는 시도를 방지 할 수 있습니다.
다음은`Delidbind`를 사용하는 일반적인 접근법입니다.
1. 설정 : 귀하의 관점에서, 귀하는 'Delidbind'를 사용하여 UI 요소와 바인딩을 정의합니다. 이 방법은 바인딩을 즉시 적용하지 않습니다. 대신, 나중에 적용 할 예정입니다.
2. 준비보기 : 뷰가 완전히로드되고 모든 UI 요소가 초기화되면 MVVMCross는 지연된 바인딩을 자동으로 적용합니다. 이를 통해 필요한 모든 구성 요소를 사용할 수있는 경우에만 바인딩이 시도됩니다.
3. 바인딩 적용 :이 시점에서, 바인딩 경로의 일부가 NULL 인 경우, NULL 참조 예외가 여전히 발생할 수 있습니다. 그러나 뷰가 준비 될 때까지 바인딩을 지연시킴으로써 조기 바인딩 시도로 인해 널 참조가 발생할 가능성을 줄입니다.
null 참조 예외 해결
'DelayBind'는 바인딩 프로세스를 구성하고 타이밍하는 데 도움이되지만 NULL 참조 예외를 해결하는 것은 일반적으로 바인딩에 관련된 모든 물체가 바인딩을 시도하기 전에 올바르게 초기화되도록 보장하는 것입니다. NULL 참조 예외를 피하기위한 몇 가지 전략은 다음과 같습니다.
- ViewModel이 설정되었는지 확인하십시오. 바인딩을 시도하기 전에 ViewModel이보기에 올바르게 설정되어 있는지 확인하십시오. 이는 iOS 용`viewDidLoad` 또는 Android 용 'OnCreate'와 같은 View의 수명주기 방법에서 ViewModel 속성을 확인하여 확인할 수 있습니다.
- 바인딩 경로 점검 : 뷰 모델에서 바인딩하는 속성이 널이 아닌지 확인하십시오. 그들이 있다면, 바인딩 전에 초기화되도록하십시오.
- 방어 프로그래밍 사용 : 코드에서 확인을 구현하여 잠재적 인 NULL 참조를 처리하십시오. 여기에는 Null-Conditional 연산자 (`? .`
- 조기 바인딩을 피하십시오 :`Delaybind '또는 이와 유사한 메커니즘을 사용하여 뷰와 그 구성 요소가 완전히 초기화 될 때만 바인딩이 적용되도록합니다.
요약하면,`Delaybind '는 바인딩 프로세스를 올바르게 타이밍하는 데 도움이되지만 NULL 참조 예외를 직접 해결하지는 않습니다. 대신, 그것은 뷰가 준비 될 때 바인딩이 적용되도록함으로써 그러한 예외를 만날 가능성을 줄이기 위해 결합 과정을 구성하는 데 도움이됩니다.
인용 :[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
[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