Ios 始终调用ViewDidLoad

Ios 始终调用ViewDidLoad,ios,swift,viewdidload,Ios,Swift,Viewdidload,我最近刚开始使用Swift,并且在viewDidLoad方法中遇到了一个“奇怪”的错误 我的非常简单的应用程序目前只有2个ViewController: MainViewController,它是应用程序入口点,用作已创建数据的概览。它还提供了添加新数据的选项,这将触发到 DataViewController,它提供创建新数据的UI,然后返回MainViewController 现在我的问题是,每当MainViewController出现时(在应用程序启动时以及每次DataViewContr

我最近刚开始使用Swift,并且在viewDidLoad方法中遇到了一个“奇怪”的错误

我的非常简单的应用程序目前只有2个ViewController:

  • MainViewController,它是应用程序入口点,用作已创建数据的概览。它还提供了添加新数据的选项,这将触发到
  • DataViewController,它提供创建新数据的UI,然后返回MainViewController
现在我的问题是,每当MainViewController出现时(在应用程序启动时以及每次DataViewController消失时),总是调用MainViewController的viewDidLoad方法。特别是,始终打印消息“MainViewController new created”

更糟糕的是,我的应用程序似乎正在“秘密”重置。为了说明这一点,我在MainViewController中定义了类变量“createView”,该变量默认为true,并在viewDidLoad期间设置为false(该变量唯一被称为/set的位置)。但是,在MainViewController出现后,输出中始终会打印消息“MVC New created”。这怎么可能?为什么/如何将createView重置为true

希望这个片段足以找到问题所在。否则,如果缺少什么,请告诉我

谢谢你的帮助

override func viewDidLoad() 
{
    super.viewDidLoad()


    if (createView)
    {
        determineArraySize()
        createDataArray()
        print("MainViewController newly created")
        createView = false

    }
    else {print("Nothing happened")}
}

正如@moritz在评论中提到的,请查看您在故事板中呈现DataViewController的方式

如果视图以模式显示,则应调用:

驳回(动画:真,完成:无)

如果使用显示顺序显示视图,则应调用:

_=导航控制器?.popViewControllerAnimated(真)


将DataViewController连接到MainViewController的是哪种segue?我的猜测是,实际上您正在将一个新实例推送到某种导航堆栈上。。因此,每次都要重新创建MainViewController。请提供您实际编写代码的代码,以便删除您的
DataViewController
@moritz:我使用“显示(例如推送)”分段(这只是因为它是在故事板中创建分段时的首选选项)。但是,我已将类型更改为“显示细节”和“以模态呈现”。没有效果,无论是在输出中,它仍然表示调用viewDidLoad,还是视觉效果(我做错了什么吗?)谢谢您的回复。正如我对Moritz评论的回复所添加的,我使用了“Show(例如push)”segue类型。老实说,我真的不明白我应该把你提到的LoC贴在什么地方。有好的指南我可以用吗?我能找到的唯一资源是苹果公司的官方资源,这对我帮助不大。谢谢,我认为问题在于您正在使用一个segue从dataViewController返回到mainViewController。。这将创建一个新的mainViewController,而不是返回到以前的VC。相反,请尝试将此代码添加到DataViewController:navigationController?.popViewControllerAnimated(true)…中的按钮触摸事件中。对于教程,请观看此视频,感谢您共享视频和信息。我基本上理解了这个问题,并且能够使用您提供的代码。但有一件事我并不清楚——你写道,如果观点是以模式呈现的,我应该使用“驳回…”。然而,我发现我需要使用这个,虽然我有一个“显示”的Segue。这可能是因为我没有使用导航堆栈控制器,而是创建了两个单独的视图,手动添加导航栏和导航栏按钮(在我的第二个/DataVC中可以选择使用不同的导航栏按钮),没错!除非在情节提要中为mainviewcontroller创建导航堆栈控制器,并使用推送序列显示dataviewcontroller,否则不能使用navigationController func。在这种情况下,“驳回”功能将不起作用。但是,正如您提到的,两个视图导航栏都是手动创建的,navigationController func将不起作用,而Disclose func应该起作用。如果您想定制导航栏,您可以尝试以下操作:非常感谢您的帮助!