19

私は iOS 6 で作業しています。私のアプリケーションには、CustomViewController が埋め込まれた標準のナビゲーション コントローラーがあります。このコントローラーでは、次のようなモーダル ビューを作成します。

-(IBAction)presentModalList:(id)sender {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    StationsListViewController *list = [storyboard instantiateViewControllerWithIdentifier:@"StationsListViewController"];
    [list setStationsData: [self.stationsData allValues]];
    [self presentModalViewController:list animated:YES];
}

モーダル コントローラーは完全に表示されますが、閉じると警告が生成されます。このコントローラーの却下メソッドは次のとおりです。

-(IBAction)backToMap
{
    [self dismissModalViewControllerAnimated:YES];
}

生成される警告は警告です:

プレゼンテーションまたは却下の進行中に、View Controller < UINavigationController: 0x1ed91620 > から却下しようとしています!

それについての手がかりはありますか?

ありがとう

4

5 に答える 5

28

これは遅い答えだと思いますが、これは他の誰かがこれに対する解決策を探しているのに役立つかもしれません。これが私がしたことです:

-(IBAction)backToMap
{
    if (![[self modalViewController] isBeingDismissed])
        [self dismissModalViewControllerAnimated:YES];
}

私にとっては、コード行が複数回呼び出されていることがわかりました。理由がわからなかったので、これが最も簡単な修正でした。

于 2012-10-25T11:59:59.870 に答える
14

私を正しい軌道に乗せてくれたJDxに感謝します。iOS 6 で廃止された機能を使用せずに警告を削除する、このソリューションを形成するように調整しました。

-(IBAction)backToMap
{
    if (![self.presentedViewController isBeingDismissed]) {
        [self dismissViewControllerAnimated:YES completion:^{}];
    }
}
于 2013-01-17T23:26:55.807 に答える
0

次のように、dismiss メソッドの完了後に、好きなことを行うことができます。

-(IBAction)backToMap
{
    [self dismissViewControllerAnimated:YES
                             completion:^{
                                 //Do something here
                             }];
}
于 2013-10-24T17:35:38.827 に答える
0

このアプローチは信頼できないことがわかりました.5つに1つのケースでは、まだエラーが表示されます.

私の解決策は、完了ブロックを使用して、安全に破棄できるかどうかを制御するフラグを設定することでした。これにより、ビューが破棄されているかどうかを確認する必要がなくなります。

-(IBAction)presentModalView:(id)sender {
    :
    self.canDismiss = NO;
    [self presentViewController:aVC animated:YES completion:^{ 
      self.canDismiss = YES; 
     }];
    :
}

却下が発生するコードのビットで、フラグを確認するだけです。

-(void)dismisser {
    :
    if (self.canDismiss) {
      [self dismissViewControllerAnimated:YES completion:nil];
    }
    :
}

早速、エラーはもうありません。

于 2013-05-14T19:31:54.983 に答える
0

iOS6をターゲットにすると、これがうまくいきました:

if (![self.presentedViewController isBeingDismissed]) 
    [self.presentedViewController dismissViewControllerAnimated:YES
                                                     completion:nil];
于 2013-08-24T11:55:40.427 に答える