ios - ViewController 不需要的分配和初始化

标签 ios objective-c uiviewcontroller uinavigationcontroller

我无法理解为什么我的 viewController 会被第二次分配。 总体思路是这样的:

1) 我在这个 viewController 中有第一个 viewController(称为 loginScreenViewController),用户从 FB/T/Mail 选择登录

2)一旦用户选择了邮件选项,我就会推送下一个名为 mailRegistrationViewController 的 viewController

3) 一旦用户使用此 viewController 登录/注册,我就会转到下一个名为 homeViewController 的 viewController 并弹出导航堆栈的 mailRegistrationViewController

流行

NSMutableArray *navStack = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[navStack removeObjectIdenticalTo:self];
[self.navigationController setViewControllers:navStack];

删除 mailRegistration 后的导航堆栈:

"<SELoginScreenViewController: 0x8f46030>",
"<SEHomeViewController: 0x8e62dc0>"

4) 在 homeViewController 中,一旦用户注销,我将他注销并弹出 homeViewController,这次使用

[self.navigationController popViewControllerAnimated:YES]; // remove from the navigation stack

我再次打印删除前后的导航堆栈

之前:

"<SELoginScreenViewController: 0x8f46030>",
"<SEHomeViewController: 0x8e62dc0>"

之后:

"<SELoginScreenViewController: 0x8f46030>"

然后在 loginViewController 的 viewWillAppear 中记录导航堆栈,这就是我得到的:

"<SELoginScreenViewController: 0x8f46030>",
"<SELoginScreenViewController: 0x8f6ea70>"

我的登录 View 再次分配和初始化。 如果有人知道为什么会这样,或者如果我需要添加更多代码,请告诉我。

谢谢

最佳答案

理想情况下,您应该只使用 pushViewController:animatedpopViewController:animated 来更改 UINavigationController 的 viewController 堆栈。

像这样执行第 3 步:

    do
    {
    id *poppedVC = [self.navigationController popViewControllerAnimated:NO]; 
            // animation not required since you will soon push a new view controller with animated:YES

    } while(poppedVC != self);


    [self.navigationController pushViewController:homeViewController animated:YES];

基本上,这会改变您从 viewController 堆栈中删除 mailRegistrationViewController 的顺序。

关于ios - ViewController 不需要的分配和初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034182/

相关文章:

ios - 如何在 StoryBoard 中连接 UI Popover ViewController

ios - 如何从不在 Storyboard 中但以编程方式创建的 View Controller 呈现 "main" Storyboard 中的 View Controller ?

ios - UITableViewController 和 UIViewController 的父类(super class)

ios - 为请求方法设置超时

ios - 如何使用 iCarousel 维护菜单之间的空间并为选定和未选定状态设置不同的文本颜色?

objective-c - NSCollectionView 中的悬停效果

objective-c - 简单的 slider 应用程序,快速提问

ios - 使用 Reactive Cocoa swift 验证文本字段

ios - UIViewController 内的 UITableViewController

ios - 为 'CONTAINED_BY' 文本查询编写一个 NSPredicate