我可能只是在视图之间传递数据完全错误,所以我愿意彻底改变我如何传递数据。如何将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