我需要删除堆栈中以前的 View Controller 。我过去曾成功使用过这种方法,没有任何问题:
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]];
现在我正在更新应用程序,它在发布配置时莫名其妙地崩溃了,而不是在调试时。此外,在 Debug模式下没有任何警告。我认为 SDK 发生了一些变化。它以前从未这样做过。
我已经制作了一个示例项目: http://dl.dropbox.com/u/7834263/RemoveTest.zip
这是一个支持 ARC 的项目。
最佳答案
第一行实际上应该是:
NSMutableArray *vcs = [self.navigationController.viewControllers mutableCopy];
NSMutableArray 是 NSArray 的子类。 arrayWithArray
是 NSArray 类的一个方法——它创建一个不可变数组。 mutableCopy
方法创建原始数组的可变副本。你真的不应该能够在你的 vcs 数组上调用 removeObject
,因为它从来都不是一个 NSMutableArray —— 它是一个 NSArray。
关于iphone - 为什么我的 UINavigationController 在发布配置时崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10391063/