我的应用中遇到一个非常奇怪的错误,在两个观看次数之间,self.navigationController
正在变为nil
我有一些视图控制器:MainViewController
,SecondViewController
PastSessionsViewController
,JournalViewController
。我将JournalViewController
用于两个目的,将新条目保存到CoreData或编辑较旧的条目。详细信息与此错误无关。
当我尝试将JournalViewController
从堆栈中弹出并返回MainViewController
但仅 <{1}}处于“编辑”状态时,会发生错误模式,而不是“保存新的输入模式”
任何想法1)为什么会发生这种情况2)如何正确处理它以便在编辑模式下从JournalViewController
返回时我可以返回PastSessionsViewController
< / p>
这里有一些代码可以使事情具体化。
在JournalViewController
(AppDelegate.swift
内):
didFinishLaunchingWithOptions
在navController = UINavigationController()
navController!.navigationBarHidden = true
var viewController = MainViewController()
navController!.pushViewController(viewController, animated: false)
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.backgroundColor = UIColor.whiteColor()
window?.rootViewController = navController
window?.makeKeyAndVisible()
:
MainViewController
在func goToPastSessions(sender: UIButton) {
let pastSessionsVC = PastSessionsViewController()
self.navigationController?.pushViewController(pastSessionsVC, animated: true)
}
func goToWriteJournalEntry(sender: UIButton) {
let journalVC = JournalViewController(label: "Record your thoughts")
self.navigationController?.pushViewController(journalVC, animated: true)
}
:
PastSessionsViewController
最后,在func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let editJournalVC = JournalViewController(label: "Edit your thoughts")
let indexPath = tableView.indexPathForSelectedRow()
let location = indexPath?.row
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! EntryCell
if let objects = pastSessionsDataSource.coreDataReturn {
if let location = location {
editJournalVC.journalEntryCoreDataLocation = location
editJournalVC.editEntry = true
editJournalVC.journalEntryToEdit = objects[location].journalEntry
}
}
self.navigationController?.presentViewController(editJournalVC, animated: true, completion: nil)
}
:
JournalViewController
谢谢你看看
答案 0 :(得分:6)
如果您希望它在同一个导航堆栈中,您应该推送editJournalVC而不是呈现。因为当您呈现控制器时它不再位于相同的导航堆栈中。此外,如果你提出它,你应该解雇它而不是流行。因此,如果您想要呈现控制器,您应该使用
self.dismissViewControllerAnimated(true, completion: nil)
而不是
self.navigationController?.popViewControllerAnimated(true)