ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

Develop Core Data iPhone Apps

Updated on September 1, 2012

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


    0 of 8192 characters used
    Post Comment

    No comments yet.


    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at:

    Show Details
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the or domains, for performance and efficiency reasons. (Privacy Policy)
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)