如何导航回到已删除的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),我可以通过UIPageViewController
button到我的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)
,我调用UIPageViewController
的viewWillAppear()
我能够“清除兑现的意见”,当我回到那里没有任何更多的前一个视图的“副本”!