XamarinとPrismで開発しているときに OnNavigatingTo とかで↓のみたいなのコード書いてると落ちた。
public async void OnNavigatingTo(NavigationParameters parameters)
{
await _pageDialogService.DisplayAlertAsync("確認", "aaaaaaa", "閉じる");
}
調べてみるとPrismのIssuesにあった
#Task.Yield()で解決
public async void OnNavigatingTo(NavigationParameters parameters)
{
await Task.Yield();
await _pageDialogService.DisplayAlertAsync("確認", "aaaaaaa", "閉じる");
}
Issues(Google翻訳)によると、AppDelegate.FinishedLaunchingの呼び出しが完了するより前にPageDialogService.DisplayAlertAsyncが呼び出されることが原因のようです。
実際にデバッグでPageDialogServiceのMainPageがnullになっているのを確認できます。
ただこの問題はCanNavigateAsyncなどでは起こりません。
CanNavigateAsyncはNavigateAsyncのあとで呼び出しされ、
そのときにはViewの初期化は完全に終わってるはずなのでAppDelegate.FinishedLaunchingの呼び出しは完了してるはずです。
##書き終わってから自信がなくなった…
ほんとにCanNavigateAsyncはFinishedLaunchingよりあと呼び出されるのか?
時間があったら調べて追記します。。。それか誰か教えてk(ry
##これは動く
public async Task<bool> CanNavigateAsync(NavigationParameters parameters)
{
return await _pageDialogService.DisplayAlertAsync("確認", "Text Speech画面へ遷移しますか?", "OK", "Cancel");
}
#遷移時は普通に動いてたから6時間くらい嵌った…