Ios 无法完全删除视图控制器?变量是否保存?

Ios 无法完全删除视图控制器?变量是否保存?,ios,swift,swift3,uitabbarcontroller,Ios,Swift,Swift3,Uitabbarcontroller,好的,我的VCs在这里的TabBarController中,我不能完全删除视图控制器。我需要删除它,重新测试它,把它擦干净。但是,即使在调用removeFromSuperview之后,仍会继续调用此函数(我的删除函数)。我知道,因为控制台语句是打印的: func resetPodcastVC() { overallNavigator.selectedIndex = 1 //list view trackStatus = .Initializing

好的,我的VCs在这里的TabBarController中,我不能完全删除视图控制器。我需要删除它,重新测试它,把它擦干净。但是,即使在调用
removeFromSuperview
之后,仍会继续调用此函数(我的删除函数)。我知道,因为控制台语句是打印的:

func resetPodcastVC()
    {
        overallNavigator.selectedIndex = 1 //list view
        trackStatus = .Initializing
        urlStr = ""

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "podcast")
        var viewcontrollers = overallNavigator.viewControllers
        viewcontrollers?.removeLast()
        self.removeFromParentViewController()
        viewcontrollers?.append(vc)
        overallNavigator.setViewControllers(viewcontrollers, animated: true)
        print("delete", trackStatus)
    }
正如您所看到的,我在顶部强制重置trackStatus和urlStr。但在print语句中,trackStatus返回为
。Failed
,这是首先触发reset func的原因:

func updateLoader()
    {
        if(isSwitching)
        {
            loadMessage = "Switch tracks"
        }
        else {
            if (trackStatus == .Initializing)
            {
                loadMessage = "Initializing"
            }
            else if(trackStatus == .Buffering)
            {
                loadMessage = "Buffering"
            }
            else if(trackStatus == .Failed)
            {
                loadMessage = "Failed"

                DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                    self.resetPodcastVC()
                }
            }
            else {
                loadMessage = "Playing"
            }
        }
此更新函数是在计时器上调用的。trackStatus基于传递给它的最后一个URL的AVPlayer状态

我不知道这里怎么了。在我尝试完全删除此VC实例后,在切换到新索引(索引1是另一个VC)后,我无法切换到任何其他索引,因为会继续调用此重置函数


如何完全删除此VC并将其重置为新的?

计时器在哪里?计时器将防止VC被释放,除非无效。您不需要加载视图控制器的新实例;您只需更新当前视图中显示的数据。UITabBarController本身管理添加/删除子视图控制器。如果需要更新任何数据,只需更新播客的ViewWillExample()中的数据即可。在UITabBarController中,不需要删除视图,因为即使在案例中使用Tabbar来显示始终处于活动状态的功能,并且如果删除视图Tabbar,它也会再次加载,因为它将被删除。花点时间加载。它的所有选项卡栏功能,如果您面临任何Ram问题,不要担心当选项卡栏切换时,打开后内存会被释放