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 的子类。arrayWithArray是 NSArray 类的一个方法——它创建一个不可变数组。该mutableCopy方法创建原始数组的可变副本。你从来没有真正应该能够调用removeObject你的 vcs 数组,因为它实际上从来不是一个 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 回答