【发布时间】:2017-09-28 22:48:35
【问题描述】:
如果我对我的 VC 执行 segues,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")
}
}
}
然而,奇怪的是,如果我点击“Debug View Hierarchy”,那么 UIBarButtons 会显示在手机上,但不会显示在 Debug View Hierarchy 中。如果我继续执行程序,然后再次点击 Debug View Hierarchy,按钮将显示在 DVH 中。此外,继续执行程序后,UIBarButtons 会继续显示在导航栏中。
【问题讨论】:
-
从您的代码中不清楚您从哪里获得 vc3 控制器。看起来你推了两次或其他东西(一次来自代码,一次来自 segue)。
-
在我的代码块中没有执行 segues,导致按钮不显示在导航栏中。我还编辑了我的问题,显示了我如何获得发生错误的最后一个视图控制器。
-
提供足够的上下文,我们可以自己重现它。我向你保证这里没有“iOS 11”错误。这是你的 bug,你需要提供足够的代码让我们看到它是什么。例如,也许您正在后台线程中执行此操作,但您根本没有显示您在哪里执行此操作,因此无法判断。
-
@matt 我准确地提供了正在发生的事情。您不知道它是否是“iOS 11”错误。请有建设性。现在您还需要什么信息?
-
@matt 刚刚看到您的编辑。将提供更多代码。
标签: ios swift uinavigationbar