Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的UIBarButtons没有显示在导航栏中?(可能是iOS 11错误?)_Ios_Swift_Uinavigationbar - Fatal编程技术网

为什么我的UIBarButtons没有显示在导航栏中?(可能是iOS 11错误?)

为什么我的UIBarButtons没有显示在导航栏中?(可能是iOS 11错误?),ios,swift,uinavigationbar,Ios,Swift,Uinavigationbar,如果我对VC执行分段,UIBarButtons将显示。但是,如果以编程方式推送到视图控制器,则UIBarButtons将不会显示。iOS 9或iOS 10中不存在漏洞 此代码存在于应用程序打开时显示的第一个视图控制器中。我正在检查UserDefaults,看看是否应该恢复我们所称的“交互”,并且我正在以编程方式创建堆栈。由于恢复应用程序状态时遇到的问题,我已恢复使用此方法 override func viewDidAppear(_ animated: Bool) { super.

如果我对VC执行分段,UIBarButtons将显示。但是,如果以编程方式推送到视图控制器,则UIBarButtons将不会显示。iOS 9或iOS 10中不存在漏洞

此代码存在于应用程序打开时显示的第一个视图控制器中。我正在检查UserDefaults,看看是否应该恢复我们所称的“交互”,并且我正在以编程方式创建堆栈。由于恢复应用程序状态时遇到的问题,我已恢复使用此方法

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

      if UserDefaults.standard.bool(forKey: "ShouldRestoreInteraction") {
            if
                let uri = UserDefaults.standard.url(forKey: "InteractionObjectURI"),
                let id = CoreDataUtils.coord.managedObjectID(forURIRepresentation: uri),
                let interactionObject = CoreDataUtils.context.object(with: id) as? InteractionObject
            {
                let sb = UIStoryboard(name: "Interaction", bundle: nil)
                let interactionCreateOrEdit = sb.instantiateViewController(withIdentifier: "InteractionUnified") as! InteractionCreateOrEdit
                interactionCreateOrEdit.interaction = Interaction(object: interactionObject)
                interactionCreateOrEdit.interactionObject = interactionObject

                if UserDefaults.standard.bool(forKey: "RestoreToDashboard") {
                    // restore to dashboard
                    let sb = UIStoryboard(name: "MyDashboard", bundle: nil)
                    let dashNav = sb.instantiateInitialViewController() as! UINavigationController
                    let dashboardTVC = sb.instantiateViewController(withIdentifier: "DashboardTableViewController")

                    self.revealViewController().setFront(dashboardTVC, animated: false)

                    dashNav.pushViewController(dashboardTVC, animated: false)
                    dashNav.pushViewController(interactionCreateOrEdit, animated: false)

                    navigationController!.present(dashNav, animated: false, completion: nil)
                } else {
                    print("Error restoring interaction - did not specify bottom controller in stack")
                }
            } else {
                print("Error restoring interaction - object in core data no longer exists")
            }
        } 
    }

然而,奇怪的是,如果我单击“调试视图层次结构”,那么UIBarButtons将显示在手机上,但不会显示在调试视图层次结构中。如果我继续执行程序,然后再次点击调试视图层次结构,按钮将显示在DVH中。此外,在继续执行程序后,UIBarButtons继续显示在导航栏中。

看起来马特先生的“保证”是正确的。不确定为什么我的代码适用于以前版本的iOS…无论如何,解决方案如下:

if UserDefaults.standard.bool(forKey: "RestoreToDashboard") {
 // restore to dashboard
 let sb = UIStoryboard(name: "MyDashboard", bundle: nil)
 let dashNav = sb.instantiateInitialViewController() as! UINavigationController
 let dashboardTVC = sb.instantiateViewController(withIdentifier:"DashboardTableViewController")
 dashNav.setViewControllers([dashboardTVC, interactionCreateOrEdit], animated: false)
 self.revealViewController().setFront(dashNav, animated: false)
}

从您的代码中不清楚您从何处获得vc3控制器。看起来你按了两次或是什么(一个来自代码,一个来自segue)。在我的代码块中没有执行导致按钮不显示在导航栏中的segue。此外,我还编辑了我的问题,显示了我是如何得到最后一个发生错误的视图控制器的。请提供足够的上下文,以便我们自己能够重现。我保证这里没有“iOS 11”bug。这是您的bug,您需要提供足够的代码,以便我们可以看到它是什么。例如,您可能正在后台线程中执行此操作,但您根本没有显示您正在执行此操作的位置,因此无法判断。@matt我提供了发生的确切情况。你根本不知道它是不是一个“iOS 11”bug。请有建设性。现在你还需要什么信息?@matt刚刚看到了你的编辑。将提供更多的代码。