あなたの質問には、何が起こっているのかを理解するのに十分なコードがありません。そのエラー メッセージを含む StackOverflow に関する質問は他にもたくさんあります。問題の適切な解決策があるかどうかを確認するために、それらに目を通す価値があるかもしれません。例: UINavigationController popToRootViewController を作成し、すぐに新しいビューをプッシュします。
「ロードの完了」を検出したい場合は、表示されている ViewControllers で ViewDidAppear メッセージをリッスンします。mvx では、すべての ViewController がViewDidAppearCalled
カスタム プレゼンターに簡単に接続できるイベントをサポートしているため、これは簡単に実行できます。
private readonly Queue<Action> _pendingActions = new Queue<Action>();
private bool _isBusy;
public override void Show(Cirrious.MvvmCross.Touch.Views.IMvxTouchView view)
{
if (_isBusy)
{
_pendingActions.Enqueue(() => Show(view));
return;
}
_isBusy = true;
var eventSource = view as IMvxEventSourceViewController;
eventSource.ViewDidAppearCalled += OnViewAppeared;
base.Show(view);
}
private void OnViewAppeared(object sender, MvxValueEventArgs<bool> mvxValueEventArgs)
{
_isBusy = false;
var eventSource = sender as IMvxEventSourceViewController;
eventSource.ViewDidAppearCalled -= OnViewAppeared;
if (!_pendingActions.Any())
return;
var action = _pendingActions.Dequeue();
action();
}
public override void ChangePresentation(Cirrious.MvvmCross.ViewModels.MvxPresentationHint hint)
{
if (_isBusy)
{
_pendingActions.Enqueue(() => ChangePresentation(hint));
return;
}
base.ChangePresentation(hint);
}
注: このコードが機能するには 3.0.13 以降が必要です (ViewDidAppear
以前のバージョンの一部のビュー コントローラーにはバグがありました)。
単純な UINavigationController を使用している場合、同様の効果を達成する別の方法は、そのコントローラーでデリゲートを使用することです - https://developer.apple.com/library/ios/documentation/uikit/reference/UINavigationControllerDelegate_Protocol/Reference/Referenceを参照してください.html