Swift - self.navigationController在转换后变为nil

时间:2015-06-28 23:14:38

标签: ios swift uinavigationcontroller

我的应用中遇到一个非常奇怪的错误,在两个观看次数之间,self.navigationController正在变为nil

我有一些视图控制器:MainViewControllerSecondViewController PastSessionsViewControllerJournalViewController。我将JournalViewController用于两个目的,将新条目保存到CoreData或编辑较旧的条目。详细信息与此错误无关。

当我尝试将JournalViewController从堆栈中弹出并返回MainViewController <{1}}处于“编辑”状态时,会发生错误模式,而不是“保存新的输入模式”

任何想法1)为什么会发生这种情况2)如何正确处理它以便在编辑模式下从JournalViewController返回时我可以返回PastSessionsViewController < / p>

这里有一些代码可以使事情具体化。

JournalViewControllerAppDelegate.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

谢谢你看看

1 个答案:

答案 0 :(得分:6)

如果您希望它在同一个导航堆栈中,您应该推送editJournalVC而不是呈现。因为当您呈现控制器时它不再位于相同的导航堆栈中。此外,如果你提出它,你应该解雇它而不是流行。因此,如果您想要呈现控制器,您应该使用

self.dismissViewControllerAnimated(true, completion: nil)

而不是

self.navigationController?.popViewControllerAnimated(true)