web-dev-qa-db-ja.com

プレゼンテーションまたは却下の進行中に、View Controllerから却下しようとする

2つのUIViewControllerクラスがあり、FirstClassにはUIButton for Loginがあり、ユーザーがボタンをタップするとSecondClass...私がやったことのために、

SecondClass *index = [[SecondClass alloc] init];
[self presentModalViewController:index animated:YES];

SecondClassにはlogoutボタンがあり、-FirstClassにリダイレクトされます。

[self dismissModalViewControllerAnimated:YES];

SecondClassで[ログアウト]ボタンを押すと、警告メッセージが表示されます

**Attempt to dismiss from view controller <FirstClass: 0e39w88e160> while a presentation or dismiss is in progress!**

ここの問題は何ですか。

16
Harish

IOS 6とiOS 6以前の両方の回答を追加しました。

iOS 5.0以降

ログアウトするときは、閉じる前に次のチェックを追加してください。

if (![self.presentedViewController isBeingDismissed])
{
    [self dismissModalViewControllerAnimated:YES completion:nil];
}

iOS 4.X以下

却下する前にこのチェックを追加してください:

if (![[self modalViewController] isBeingDismissed])
{
    [self dismissModalViewControllerAnimated:YES];
}
31
Kevin Zych

ログアウトして確認する場所で次の行を呼び出します。

if (![[self modalViewController] isBeingDismissed])
{
   [self dismissModalViewControllerAnimated:YES];
}
3
Vishal

これには多くの原因があります。いくつかのオプションを次に示します。

  1. ViewWillAppear、viewWillAppearなどのViewControllerメソッドの1つでスーパーを呼び出すのを忘れました。スーパーを呼び出す必要がある場合は、UIViewControllerのドキュメントを参照してください。
  2. DismissModalViewControllerAnimated:メソッドが複数回呼び出されています。これは、UIButtonにターゲットを複数回追加した場合に発生する可能性があります。

問題をよりよく理解するために、両方のView Controllerのコード全体を貼り付けてください。

1
Tom Susel