2010-08-02 17 views
0

我可能只是在視圖之間傳遞數據完全錯誤,所以我願意徹底改變我如何傳遞數據。如何將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]; 

回答

1

你爲什麼要把它發回來?您的根視圖控制器不是-dealloc'ed,所以它仍然存在於內存中,仍然有一個對NSManagedObjectContext的引用。沒有什麼可以傳回去的。

您得到的錯誤與核心數據無關。在調試器中運行它並在objc_exception_throw上設置斷點並查看它在哪裏崩潰。

+0

我的印象是,當視圖控制器不再是UINavigationController的當前焦點時,視圖控制器會自動解除分配。猜猜這會改變一切。 – Rob 2010-08-02 16:36:28

+0

只有當它們從堆棧中移除時纔會被釋放。當你在頂部推另一個視圖時,它不會釋放下面的視圖。當你從堆棧彈出一個視圖控制器,然後它被釋放。 – 2010-08-02 21:59:27

相關問題