情况:我想从数据条目列表导航回到我的PageViewController。
之前和之前的功能正常工作
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()中设置UIViewController
(位置),则UIPageViewController
可以通过按钮从UIPageViewController
转到我的位置,UITableView
并且我可以向后导航,并且一切正常。但是我想删除自己的位置,UITableView
并且当我删除要导航的位置时(每个位置后面的dada后面CoreData
),它会崩溃,因为其中的数据CoreData
不见了。
我试图UIViewController
在viewWillAppear(animated:Bool)中设置(位置)。现在,我可以删除条目,浏览并拥有自己的设置UIViewController
(位置),但是我可以-如果我滚动到上一个视图,则viewControllerBeforeViewController
返回刚才显示的“副本”,尽管返回nil ...这怎么可能?
第一个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) {
}
我找到了解决方案:
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()
我能够‘清除兑现意见’,当我导航回没有上一个视图的‘复制’更多!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句