如何在不导入第一个 UIViewController 类的情况下从 UINavigationController 中的另一个 UIViewController 手动释放 UIViewControlle

Posted

技术标签:

【中文标题】如何在不导入第一个 UIViewController 类的情况下从 UINavigationController 中的另一个 UIViewController 手动释放 UIViewController?【英文标题】:How can I dealloc manually UIViewController from another UIViewController in UINavigationController without import the first UIViewController class? 【发布时间】:2014-09-09 10:46:18 【问题描述】:

我有一个导航控制器。第一个viewcontroller 是FirstViewController 的一种。当我在 FirstViewController 中点击一个按钮时,它会将第二个 viewController 推入 navigationController,它是一种 SecondViewController 类。当我点击 SecondViewController 中的按钮时,我想释放 FirstViewController(之前保存在 navigationController 中)以便重新开始,就好像我第一次在 SecondViewController 的 navigationItem 中点击返回按钮时打开 FirstViewController。这是我点击 secondViewController 中的按钮时调用的方法的代码:

NSArray * navigationPath = [self.navigationController viewControllers];
UIViewController *previousVC = [navigationPath objectAtIndex:[navigationPath count]-2];
[previousVC performSelector:@selector(viewDidUnload)];

它不会释放 FirstViewController。有办法吗?

【问题讨论】:

你不应该手动解除分配,当对象的保留计数减少到零时,运行时会调用对象的 dealloc 方法,并且不需要解除您的第一个视图控制器,(可能是) rootviewcontroller 你应该改变设计 【参考方案1】:

创建一个新的第一个视图控制器

FirstViewController *first = [[FirstViewController alloc]init];

重置导航堆栈

[self.navigationController setViewControllers:@[first, self] animated:NO];

导航到第一个

[self.navigationController popViewController:YES];

【讨论】:

【参考方案2】:

您需要在导航控制器中重置视图控制器数组。

在您的第二个视图控制器中:

[self.navigationController setViewControllers:@[self] animated:NO];

【讨论】:

这样,如果我点击返回按钮它什么都不做

以上是关于如何在不导入第一个 UIViewController 类的情况下从 UINavigationController 中的另一个 UIViewController 手动释放 UIViewControlle的主要内容,如果未能解决你的问题,请参考以下文章

如何在不导入自定义小部件类包的情况下使用自定义小部件和 uic.loadUi?

如何在不重复导入***名称的情况下构造python包

如何在不破坏浏览器的情况下导入大量Wordpress帖子?

如何在不导入类的情况下获取类的方法

如何在不导入所有函数的情况下在包中使用 data.table?

Dart - 一个 dart 项目如何在不使用 pub 的情况下从另一个 dart 项目导入代码?