Develop Core Data iPhone Apps

In order to properly setup a Core Data to create and launch the NSManagedObjectContext, NSManagedObjectModel and NSPersistentStoreCoordinator, the root view controller must be properly set in the didFinishLaunchingWithOptions method of the AppDelegate. This configuration will depend on the type of application you intend to build.

This tutorial provides the code samples to setup three types of iOS apps: with a Navigation View Controller, with regular View Controller or with a Tab Bar Controller.

Core Data with a Navigation View Controller


To use a Navigation View Controller in conjunction you will need to follow these steps to properly initiate and launch Core Data objects. First in the AppDelegate header import the CoreData library as well as the header file for the main view controller in your app. The code snippet below shows the code in the header file.

...
#import <CoreData/CoreData.h>
#import "YourMainViewController.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>
...

In the didFinishLaunchingWithOptions in the implementation file, you will need to create a UINavigationController object and set it to the rootViewController. Next create a new view controller object using your main view controller class that you imported in the header and assign it to the topViewController, or first view controller, of the navigation view controller that you previously created. Finally set the managedObjectContext property of the view controller object to the managedObjectContext instance variable that you will need to declare and create.

 UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;

YourMainViewController *controller = (MasterViewController *)navigationController.topViewController;

controller.managedObjectContext = self.managedObjectContext;

Core Data with Regular View Controller


In the AppDelegate header you need to add a class directive to the root view controller you intend to load at launch like the following code demonstrates:

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>

@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
â¦

In the didFinishLaunchingWithOptions method create a new ViewController object, (or whatever you named your ViewController subclass) and set it to the rootViewController as the following code snippet demonstrates below.

Next assign the self.managedObjectContext instance variable that we have declared and synthesized to the managedObjectContext property instance of the ViewController object. This will properly call the required methods, see my tutorial on creating a Core Data app from scratch, to properly setup Core Data. Of course the prerequisites must be done first which are explained in the above mentioned tutorial.

 ViewController *controller = (ViewController *)self.window.rootViewController;
 controller.managedObjectContext = self.managedObjectContext;

Core Data with a Tab Bar Controller


The Tab Bar Controller follows the same pattern as the previous two configuration options.In the header file you will need to import both the CoreData Library and the main view controller in you app or at least the view controller where the Core Data objects or operations will be done like the following code snippet shows:

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "klViewController.h"

@class klViewController;
@interface klAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
...

@property (nonatomic, strong) IBOutlet  UITabBarController *tabNavigator;
@property (nonatomic, strong) IBOutlet  klViewController *viewController;

Next declare two IBOutlets; one for the UITabBarController and the other for the view controller as the above code demonstrates. Of course you still have to add the Core Data objects.

In the didFinishLaunchingWithOptions method of the implementation file assign the managedObjectContext from the AppDelegate to the managedObjectContext of the view controller. Please note that you must add this functionality to the view controller by implementing the NSFetchedResultsControllerDelegate and creating a local NSManagedObjectContext variable. Finally add the tabNavigator view to the window.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
   
    viewController.managedObjectContext = self.managedObjectContext;
    [_window addSubview:tabNavigator.view];
    return YES;
}

In summary



This tutorial presents three of the most common and likely only Core Data launch design that you will use. Granted you may elaborate on these simplistic designs but premise should remain the same. For a more thorough tutorial on setting up and using Core Data check out these other tutorials:

Core Data for Beginners

Core Data from Scratch

Core Data Image (Binary Data) Storage and Retrieval

Core Data Storing Audio Files as Binary Data

More by this Author


Comments

No comments yet.

    Sign in or sign up and post using a HubPages Network account.

    0 of 8192 characters used
    Post Comment

    No HTML is allowed in comments, but URLs will be hyperlinked. Comments are not for promoting your articles or other sites.


    Click to Rate This Article
    working