我可能只是在視圖之間傳遞數據完全錯誤,所以我願意徹底改變我如何傳遞數據。如何將NSManagedObjectContext備份到UINavigationController中的根視圖?
我的應用程序的委託創建的NSManagedObjectContext並傳遞到我的主菜單使用一個UINavigationController這使得它的根視圖:
MainMenuViewController *mainMenuViewController = [[MainMenuViewController alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Handle the error.
}
// Pass the managed object context to the view controller.
mainMenuViewController.managedObjectContext = context;
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:mainMenuViewController];
self.theNavController = aNavigationController;
[[self theNavController] setNavigationBarHidden:YES animated:NO];
[window addSubview:theNavController.view];
[window makeKeyAndVisible];
[mainMenuViewController release];
[aNavigationController release];
然後,當他們選擇從主菜單中選擇不同的視圖控制器,我初始化新的視圖控制器,通過向NSManagedObjectContext中,然後將其推到UINavigationController的:
BombsViewController *bombsViewController = [[BombsViewController alloc] init];
bombsViewController.managedObjectContext = self.managedObjectContext;
[self.navigationController pushViewController:bombsViewController animated:YES];
[bombsViewController release];
一切都很好,直到我決定從我BombsViewController返回到主菜單。我試圖使用以下方法來彈出根視圖控制器放回的UINavigationController:
[self.navigationController popToRootViewControllerAnimated:YES];
不過,我看不到的方式來根視圖控制器我的NSManagedObjectContext發回自popToRootViewControllerAnimated方法不接受一個觀點。我嘗試使用popToViewController:動畫:方法,但然後用應用程序崩潰「扔的‘NSException’實例終止後,被稱爲」,「程序接收到的信號:‘SIGABRT’」:
MainMenuViewController *mainMenuViewController = [[MainMenuViewController alloc] init];
mainMenuViewController.managedObjectContext = self.managedObjectContext;
[self.navigationController popToViewController:mainMenuViewController animated:YES];
[mainMenuViewController release];
我的印象是,當視圖控制器不再是UINavigationController的當前焦點時,視圖控制器會自動解除分配。猜猜這會改變一切。 – Rob 2010-08-02 16:36:28
只有當它們從堆棧中移除時纔會被釋放。當你在頂部推另一個視圖時,它不會釋放下面的視圖。當你從堆棧彈出一個視圖控制器,然後它被釋放。 – 2010-08-02 21:59:27