2016-05-07 8 views
1

状況:データエントリのリストからPageViewControllerに戻る必要があります。私は私が私のUITableViewと私にUIPageViewControllerからボタンを経由して行くことができる)のviewDidLoadでUIPageViewController(からUIViewController(場所)を設定した場合:削除されたPageViewControllerエントリへのナビゲート方法/ 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 
} 

問題を働きます戻ってナビゲートすることができ、すべて正常に動作します。しかし、私はUITableViewの場所を削除したいと私はCoreDataのデータがなくなったので、私は戻って(すべての場所の背後には、CoreDataのダダです)、それがクラッシュするために移動したいものを削除します。

私はで、UIViewController(場所)をviewWillAppear(アニメーション:ブール)に設定しようとしました。今、私はエントリを削除して戻って自分のセットを持っているUIViewController(場所)BUT私が持っている - 私は前のビューにスクロールするとちょうど表示されたの "コピー" viewControllerBeforeViewControllerリターンnil ...これは可能ですか?

最初のviewDidLoad()バージョンのコードスニペット:私は「明らかにできていますUIPageViewControllerさんviewWillAppear()に呼び出すsetViewControllerAndClearCache(vc: UIViewController)

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)     
      }) 
     }) 
    } 
} 

:私は解決策を見つけた

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) { 

} 

答えて

0

キャッシュされたビュー "と私が戻るときには、以前のビューの"コピー "はもうありません!

関連する問題