RTRootNavigationController icon indicating copy to clipboard operation
RTRootNavigationController copied to clipboard

- (void)removeViewController:(UIViewController *)controller 没有改变rt_viewControllers

Open mario-huang opened this issue 7 years ago • 8 comments
trafficstars

调用了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都没有变化。

mario-huang avatar Oct 22 '18 10:10 mario-huang

我这边也有类似操作,应该是你代码写错了.

seanLee avatar Nov 01 '18 05:11 seanLee

我是在for循环里面调用的removeViewController。第一次的进到了controllerToRemove,到了第二次,发现第二次的self.viewControllers并没有减少1个。

mario-huang avatar Nov 01 '18 06:11 mario-huang

额~我搞错了 我以为这个是你自己写的

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?

seanLee avatar Nov 01 '18 06:11 seanLee

对的,我是要一次性移除多个指定VC,所以循环的调了removeViewController

mario-huang avatar Nov 01 '18 08:11 mario-huang

[UINavigationController setViewControllers:]不是同步更新的,set之后立即获取得到的还是旧的viewControllers

yayanet avatar May 17 '19 03:05 yayanet

对的, 如果数组管理不当, 可能导致错乱

HellojingQiu avatar Jun 24 '19 06:06 HellojingQiu

作者好久不更新了。。。

mario-huang avatar Jun 25 '19 02:06 mario-huang

这些问题已了解,要解决可能需要一些取舍

rickytan avatar Jun 30 '19 02:06 rickytan