CoreData: managedObjectContext not being created

Posted by PruitIgoe on Stack Overflow See other posts from Stack Overflow or by PruitIgoe
Published on 2013-11-04T18:41:20Z Indexed on 2013/11/04 21:53 UTC
Read the original article Hit count: 297

Filed under:
|

I had to add core data to an existing project but I am having issues with the managedObjectContext...

in prefix.pch I have this:

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
#endif
...

in my appDelegate.h I have this:

#import <UIKit/UIKit.h>
#import "AppViewController.h"

#import "DDLog.h"
#import "DDASLLogger.h"
#import "DDFileLogger.h"
#import "DDTTYLogger.h"
#import "KIP_LogManager.h"


@interface AppDelegate : UIResponder <UIApplicationDelegate> {

    DDFileLogger* fileLogger;

    /*coredata*/
    NSManagedObjectModel* managedObjectModel;
    NSManagedObjectContext* managedObjectContext;
    NSPersistentStoreCoordinator* persistentStoreCoordinator;

}

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) AppViewController* viewController;
@property (readonly, strong, nonatomic) NSManagedObjectContext* managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel* managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator* persistentStoreCoordinator;


- (void)setupLogging;

- (NSString *)applicationDocumentsDirectory;

in appDelegate.m this:

@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;

...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //establish lumberjack logging
    [self setupLogging];

    DDLogVerbose(@"\n\n*********************\nNEW LOG SESSION\n**********************\n\n");

    //set root view controller
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[AppViewController alloc] init];
    self.window.rootViewController = self.viewController;

    self.viewController.managedObjectContext = _managedObjectContext;

    return YES;
}

...

    #pragma mark - CoreData Stack

    - (NSManagedObjectContext *)managedObjectContext
    {
        if (_managedObjectContext != nil) {
            return _managedObjectContext;
        }

        NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
        if (coordinator != nil) {
            _managedObjectContext = [[NSManagedObjectContext alloc] init];
            [_managedObjectContext setPersistentStoreCoordinator:coordinator];
        }

        return _managedObjectContext;
    }

    // Returns the managed object model for the application.
    // If the model doesn't already exist, it is created from the application's model.
    - (NSManagedObjectModel *)managedObjectModel
    {
        if (_managedObjectModel != nil) {
            return _managedObjectModel;
        }
        NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"SPI_PAC" withExtension:@"momd"];
        _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
        return _managedObjectModel;
    }

    - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

        if (persistentStoreCoordinator != nil) {
            return persistentStoreCoordinator;
        }

        NSMutableString* strDocsDirector = [[NSMutableString alloc] initWithString:[self applicationDocumentsDirectory]];
        [strDocsDirector appendString:@"/SPI_PAC.sqlite"];

        NSURL* storeURL = [NSURL URLWithString:strDocsDirector];

        NSError *error = nil;
        persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
                                      initWithManagedObjectModel:[self managedObjectModel]];
        if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                     configuration:nil URL:storeURL options:nil error:&error]) {
            /*Error for store creation should be handled in here*/
        }

        return persistentStoreCoordinator;
    }

    - (NSString *)applicationDocumentsDirectory {
        return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    }

in the view controller, viewDidLoad I am logging the passed managedObjectContext and am getting null returned. Obviously I am missing something but not sure what?

In viewcontroller.h I have:

@property (nonatomic, retain) NSManagedObjectModel* managedObjectModel;
@property (nonatomic, retain) NSManagedObjectContext* managedObjectContext;
@property (nonatomic, retain) NSPersistentStoreCoordinator* persistentStoreCoordinator;

and in the viewcontroller.m:

@synthesize managedObjectContext = managedObjectContext;
...
 DDLogVerbose(@"%@", managedObjectContext);

© Stack Overflow or respective owner

Related posts about cocoa-touch

Related posts about core-data