Jeswin
Jeswin

Reputation: 238

Core data: Set Managed Object Context from AppDelegate for app with UITabBarController

I usually set the managedObjectContext for the root view using the following code in AppDelegate.h:

UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
HomeViewController *controller = (HomeViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;

But my current application contains a custom UITabBarController at the root followed by a UINavigationController and then the UIViewController. How do I set the managedObjectContext to the view controller?

Upvotes: 0

Views: 872

Answers (1)

Marc
Marc

Reputation: 6190

You can do it very similar

UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
// index 0 means left-most tab    
UINavigationController *navigationController = (UINavigationController *)tabController.viewControllers[0];
HomeViewController *controller = (HomeViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;

Or, what I prefer:

In your HomeViewController do

#import "AppDelegate.h"

// somewhere (e. g. awakeFromNib, loadView or viewDidLoad)
self.managedObjectContext = ((AppDelegate *) [UIApplication sharedApplication].delegate).managedObjectContext

And in your AppDelegate make managedObjectContext a public property.

Upvotes: 1

Related Questions