ViewDidLoadでビューモデルを初期化しようとしています。 ViewModelの初期化コードでいくつかの非同期メソッドを呼び出す必要があるので、非同期コードをコンストラクタからasync factory methodに移動しました。Xamarin Async ViewDidAppearがViewDidLoadで呼び出されました
私は私のUIViewControllerのサブクラスでasync void
としてViewDidLoad
とViewWillAppear
をマークしたが、4行目はViewWillAppear
を実行している間に、何らかの理由でキックオフし、ライン11は、ViewModelには、まだ初期化されていないためNullReferenceException
スローされます。
Xamarinはであるため、ViewDidLoadが完了するのを待つことができませんが、ここではasync void
を使用する必要があります。これはメソッドをオーバーライドするためです。
MyCustomUiViewController.cs
1 public override async void ViewDidLoad()
2 {
3 base.ViewDidLoad();
4 ViewModel = await ViewModel.CreateAsync();
5 OtherStuff();
6 }
7
8 public override async void ViewWillAppear(bool animated)
9 {
10 base.ViewWillAppear(animated);
11 ViewModel.SomeMethod(); // <-- NullReferenceException
12 AttachViewModelToViewBindings();
13 }
非同期のViewModelのインスタンスを作成するためのより良いパターンがある場合、私はアーキテクチャの変更に開いています。
機能を非同期に設定しましたが、それでも待っているとは限りません。もしそれが、それは確かに、しかし、おそらくか? – bodangly
私も同じ問題に直面していますが、回避策を見つけましたか? –
@ ZeaShah私は以下の回答を追加しました。 – Seafish