2013-07-21 66 views
0

我有重大的內存管理問題。在小程序使用後,它會崩潰內存不足。我終於找到了原因,每次創建新的ViewController而不是訪問實例時,我都會創建一個新的實例。內存管理 - 如何在不創建新實例的情況下顯示已經實例化的ViewController

因此,應用程序加載並實例化FirstViewController。您單擊一個實例化FilterViewController的按鈕。從這裏的時候回到FirstViewController我創造的這個新例如如下:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName 
     :@"MainStoryboard" bundle:nil]; 

    FirstViewController *fvc = [storyboard 
     instantiateViewControllerWithIdentifier:@"FirstViewController"]; 

    fvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

,並重復過程。任何呈現視圖控制器而不重新實例化的方式?我接近提交應用程序(希望明天),所以我需要嘗試得到這個排序。謝謝!

這裏是ViewController的介紹。

[self presentViewController:fvc animated:YES completion:nil]; 

呈現FilterViewControllerFirstViewController

- (IBAction)searchOptions:(id)sender { 
    FilterViewController *ctrl = [[FilterViewController alloc] init]; 
    [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil]; 

    self.filterViewController = ctrl; 

    [self.navigationController pushViewController:self.filterViewController animated:NO]; 

} 

回答

1

如果您使用presentViewController,您可以通過調用[self dismissViewControllerAnimated:YES];回到以前的視圖。您可以在當前正在創建新控制器的方法中執行此操作。

如果您正在推入導航控制器,您將從導航控制器彈出:[self.navigationController popViewControllerAnimated:YES];


根據您的上次更新,您似乎沒有導航控制器,而只是將視圖添加爲子視圖並存儲過濾視圖控制器。這會讓生活變得更加複雜,並且刪除它的正確方法是設置一個委託關係,以便過濾器視圖控制器在完成後回調到第一個視圖控制器,然後第一個控制器轉換視圖並且刪除參考。

如果可以,請更改爲正確使用導航控制器。你已經有一半的代碼,但第一個視圖控制器似乎不在導航控制器中。如果你使用導航控制器的生活將很容易...

+0

嘿謝謝你。所以我把這段代碼放在'[self dismissViewControllerAnimated:YES completion:^ {NSLog(@「test」); }];'但是它不會返回或添加NSLog。我已經去了我的'FirstViewController',它有這樣一行:'[self.navigationController pushViewController:self.filterViewController animated:NO];'所以我應該嘗試彈出它? –

+0

試圖彈出它,但它什麼都不做,試過'popToRootViewControllerAnimated'也沒有做任何事 –

+0

你在過濾視圖控制器的方法中添加了彈出代碼?你可以展示如何創建和顯示原始控制器的代碼。 – Wain

相關問題