2013-04-24 26 views
0

我正在使用一個數組在UIPageViewController上添加一些viewControllers。問題在於,當您進一步滑動時它們會留在內存中,我想刪除它們。我發現這個代理方法:從UIPageViewController中刪除以前添加的viewControllers

- (void)pageViewController:(UIPageViewController *)pvc didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 
{ 
    // If the page did not turn 
    if (!completed) 
    { 
     return; 
    } 
    // This is where I want to delete the previousViewControllers to release memory 
} 

但是,如何刪除那些previousViewControllers?如果你向後滾動,他們需要重新加載,但我需要刪除它們,否則它們會一直留在內存中。

+0

UIPageViewController應該掛在最多3個控制器上(current,previous,next),你永遠不應該(實際上也不能)刪除它所持有的控制器。如果你的控制器掛在這裏的時間比這長,那可能是因爲你在你添加的數組中引用了它們。將它們提供給UIPageViewController之後,你應該能夠安全地將任何你有viewController的指針設置爲nil,因爲UIPageViewController保留了一個強指針。 – 2013-04-24 14:29:55

回答

-1

我從來沒有用過UIPageViewController,但看起來previousViewControllers是隻讀的。我會做的是發送一條消息到先前的ViewControllers,告訴他們重新加載。

例如,我相信這將進入最後的ViewController顯示:

MyVC *lastVC = (MyVC*)[previousViewControllers objectAtIndex:[previousViewControllers count]-1]; 
lastVC.reloadFlag = YES; // Assuming you have a reloadFlag property in your MyVC class 

所以你可以把你在你的問題有方法。

然後確保viewWillAppear叫你MyVC *對象,當你回到你的ViewController,如果是,把簡單的事情吧:

if(_reloadFlag) { 
    //updateUI 
} 

這只是一個想法,你可能有改變一些東西,使其工作。

+0

問題是在UIPageViewController上添加的viewControllers來自不同的類,所以例如不僅是「MyVC」,還有MyVC2,MyVC3,MyVC4等...... – Shinonuma 2013-04-24 16:14:12

+0

也許你可以讓所有的VC類都從一個類繼承超國家會有國旗作爲財產? – rdurand 2013-04-25 07:26:08

+0

或者您將標誌添加到所有類(如果不是太多),並使用* [lastVC isKindOfClass:@「...」] *來檢查類。 – rdurand 2013-04-25 07:27:15

相關問題