如何导航回到已删除的PageViewController条目/更改PageViewController条目

情况:我想从一个数据条目列表导航到我的PageViewController。

之前和之前的function工作

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { if ((viewController as! LocationViewController).mLocationIndex > 0){ let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("LocationViewController") as! LocationViewController vc.mLocationIndex = (viewController as! LocationViewController).mLocationIndex - 1 return vc } return nil } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { let locCount = DataManager.sharedInstance.getLocationCount() if ((viewController as! LocationViewController).mLocationIndex < locCount - 1){ let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("LocationViewController") as! LocationViewController vc.mLocationIndex = (viewController as! LocationViewController).mLocationIndex + 1 return vc } return nil } 

问题:如果我从viewDidLoad()中的UIPageViewController设置UIViewController (Location),我可以通过UIPageViewControllerbutton到我的UITableView ,我可以导航回来,一切工作正常。 但是我想删除我的UITableView位置,当我删除一个我想要导航的位置(在每个位置后面都是CoreData中的CoreData )时,它会崩溃,因为CoreData中的数据不见了。

我试图在viewWillAppear(animated:Bool)中设置UIViewController (Location)。 现在我能够删除条目,导航回来,并拥有自己的设置UIViewController (位置), 我有 – 如果我滚动到前一个视图的“副本”刚刚显示,虽然viewControllerBeforeViewController返回零…这怎么可能?

第一个viewDidLoad()版本的代码片段:

 class MainPageViewController: UIPageViewController { override func viewDidLoad() { super.viewDidLoad() dataSource = self let dM = DataManager.sharedInstance let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("LocationViewController") as! LocationViewController dM.mActualLocationIndex = 0 // check if the index is too big (deleted data) if (dM.mActualLocationIndex < dM.getLocationCount()){ vc.mLocationIndex = dM.mActualLocationIndex } else { vc.mLocationIndex = 0 dM.mActualLocationIndex = 0 } vc.mLocationIndex = 0 setViewControllers([vc], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) } override func viewWillAppear(animated: Bool) { } 

我find一个解决scheme:

 extension UIPageViewController { func setViewControllerAndClearCache(vc: UIViewController){ setViewControllers([vc], direction: .Forward, animated: true, completion: { _ in dispatch_async(dispatch_get_main_queue(), { self.setViewControllers([vc], direction: .Forward, animated: false, completion: nil) }) }) } } 

使用setViewControllerAndClearCache(vc: UIViewController) ,我调用UIPageViewControllerviewWillAppear()我能够“清除兑现的意见”,当我回到那里没有任何更多的前一个视图的“副本”!