2010-08-02 22 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

相关问题