RTRootNavigationController
RTRootNavigationController copied to clipboard
- (void)removeViewController:(UIViewController *)controller 没有改变rt_viewControllers
调用了removeViewController多次,发现每次
- (void)removeViewController:(UIViewController *)controller animated:(BOOL)flag
{
NSMutableArray<__kindof UIViewController *> *controllers = [self.viewControllers mutableCopy];
__block UIViewController *controllerToRemove = nil;
[controllers enumerateObjectsUsingBlock:^(__kindof UIViewController * obj, NSUInteger idx, BOOL * stop) {
if (RTSafeUnwrapViewController(obj) == controller) {
controllerToRemove = obj;
*stop = YES;
}
}];
if (controllerToRemove) {
[controllers removeObject:controllerToRemove];
[super setViewControllers:[NSArray arrayWithArray:controllers] animated:flag];
}
}
里面的self.viewControllers都没有变化。
我这边也有类似操作,应该是你代码写错了.
我是在for循环里面调用的removeViewController。第一次的进到了controllerToRemove,到了第二次,发现第二次的self.viewControllers并没有减少1个。
额~我搞错了 我以为这个是你自己写的
NSMutableArray *viewControllers = self.rt_navigationController.viewControllers.mutableCopy;
UIViewController *deleteOne;
for (UIViewController *viewController in viewControllers) {
if ([viewController.childViewControllers.firstObject isKindOfClass:[RTContainerNavigationController class]]) {
RTContainerNavigationController *nav = (RTContainerNavigationController *)viewController.childViewControllers.firstObject;
if ([nav.topViewController isKindOfClass:[SPTweetDetailViewController class]]) {
deleteOne = viewController;
break;
}
}
}
if (deleteOne) {
[viewControllers removeObject:deleteOne];
}
self.rt_navigationController.viewControllers = viewControllers;
你是想移除导航栈中的指定VC?
对的,我是要一次性移除多个指定VC,所以循环的调了removeViewController
[UINavigationController setViewControllers:]不是同步更新的,set之后立即获取得到的还是旧的viewControllers
对的, 如果数组管理不当, 可能导致错乱
作者好久不更新了。。。
这些问题已了解,要解决可能需要一些取舍