2013-04-30 61 views
0

我在添加核心數據功能到我的應用程序時遇到問題。添加核心數據到故事板應用程序時遇到問題

我不明白爲什麼managedObjectContext總是爲零(即使在我的AppDelegate中)。我知道我應該從模型中傳遞出來,但不知道如何做到這一點。

我得到以下錯誤:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Goal''

g4tappDelegate.h

#import <UIKit/UIKit.h> 
#import "Goal.h" 
@class g4tPopPageViewController; 

@interface g4tAppDelegate : UIResponder <UIApplicationDelegate> { 

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

    UIWindow *window; 

} 

- (NSManagedObjectContext *)managedObjectContext; 

@property (strong, nonatomic) UIWindow *window; 

@property (strong, nonatomic) g4tPopPageViewController *PopPageViewController; 
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

@end 

g4tappDelegate.m

#import "g4tAppDelegate.h" 
    #import "g4tPopPageViewController.h" 
    #import "Goal.h" 

    @implementation g4tAppDelegate 
    NSManagedObjectContext *managedObjectContext; 

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

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     NSManagedObject *newGoal; 
//ERROR HERE 
     newGoal = [NSEntityDescription 
        insertNewObjectForEntityForName:@"Goal" 
        inManagedObjectContext:_managedObjectContext]; 

     PopPageViewController.managedObjectContext = self.managedObjectContext; 

     UIStoryboard* sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"AddGoal"]; 

     UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 

     [self.window setRootViewController:navigationController]; 
     [self.window makeKeyAndVisible]; 
     // Override point for customization after application launch. 

     return YES; 
    } 
+0

你在哪裏初始化'_managedObjectContext'? – 2013-04-30 18:17:24

+0

持久性商店在哪裏? – 2013-04-30 18:18:30

+0

你有沒有得到這個工作?如果是這樣,不要忘記將問題標記爲已回答。 ;-) – 2013-06-08 10:35:44

回答

1

首先初始化您的上下文。創建後首先將上下文傳遞給viewController實例。要麼你錯過了一些實現,或者你沒有在這裏發佈。

另外,糾正你的財產

@property (strong, nonatomic) PopPageViewController *g4tPopPageViewController; 

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

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

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"YourStore.sqlite"]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 


    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
    } 

    return _persistentStoreCoordinator; 
} 

// Then pass it to your other controller from your viewDidLoad 
vc.managedObjectContext = _managedObjectContext; 
相關問題