1

スタック内の以前のビュー コントローラーを削除する必要があります。過去にこの方法を問題なく使用できました。

NSMutableArray *vcs = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    BOOL removedFlag = YES;
    while (removedFlag == YES)
    {
        removedFlag = NO;
        for (UIViewController *vc in vcs)
        {
            if( ![vc isKindOfClass:[self class]] && ![vc isKindOfClass:[MenuVC class]] )
            {
                [vcs removeObject:vc];
                removedFlag = YES;
                break;
            }
        }
    }
    [self.navigationController setViewControllers:[NSArray arrayWithArray:vcs]];

現在、アプリを更新していますが、デバッグではなく、リリース構成で不思議なことにクラッシュします。さらに、デバッグ モードでは警告はまったくありません。SDKで何かが変わったと思います。これは以前はありませんでした。

サンプル プロジェクトを利用できるようにしました: http://dl.dropbox.com/u/7834263/RemoveTest.zip

これは ARC 対応プロジェクトです。

4

2 に答える 2

1

最初の行は実際には次のようになります。

NSMutableArray *vcs = [self.navigationController.viewControllers mutableCopy];

NSMutableArray は NSArray のサブクラスです。arrayWithArrayNSArray クラスのメソッドです -- 不変の配列を作成します。このmutableCopyメソッドは、元の配列の変更可能なコピーを作成します。removeObjectvcs 配列は実際には NSMutableArray ではなく、NSArray であったため、呼び出すことができなかったはずです。

于 2012-04-30T22:00:28.333 に答える
0

スタック内の以前のviewControllerを削除する簡単な方法は次のとおりです。

 int vcIdx=[self.navigationController.viewControllers indexOfObject:self]-1;
 NSMutableArray *vControllers = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; 
 [vControllers removeObjectAtIndex:vcIdx]; 
 self.navigationController.viewControllers=vControllers;
于 2012-04-30T22:16:48.123 に答える