2012-03-11 112 views
-1

AppDelegate.h错误在iPhone核心数据

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

@interface AppDelegate : UIResponder <UIApplicationDelegate> { 
    NSManagedObjectModel *managedObjectModel; 
    NSManagedObjectContext *managedObjectContext; 
    NSPersistentStoreCoordinator *persistentStoreCoordinator; 
} 
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, retain, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
- (NSString *)applicationDocumentsDirectory; 
@property (strong, nonatomic) UIWindow *window; 
@end 

AppDelegate.m

#import "AppDelegate.h" 
@implementation AppDelegate 

@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 
@synthesize window = _window; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    if (!context) { 
     NSLog(@"Error"); 
    } 
    return YES; 
} 
- (void)applicationWillTerminate:(UIApplication *)application { /* Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. */ 
    NSError *error; 
    if (managedObjectContext != nil) { 
     if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { 
     // Handle the error. 
     } 
    } 
} 
// Explicitly write Core Data accessors 
- (NSManagedObjectContext *) managedObjectContext { 
    if (managedObjectContext != nil) { 
     return managedObjectContext; 
    } 
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [managedObjectContext setPersistentStoreCoordinator: coordinator]; 
    } 
    return managedObjectContext; 
} 
- (NSManagedObjectModel *)managedObjectModel { 
    if (managedObjectModel != nil) { 
     return managedObjectModel; 
    } 
    managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
    return managedObjectModel; 
} 
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 
    if (persistentStoreCoordinator != nil) { 
     return persistentStoreCoordinator; 
    } 
    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"iSalahProject.sqlite"]]; 
    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 { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 
    return basePath; 
} 
@end 

我的控制器实现类在正在创建的实体,我得到的错误:

-(IBAction)addChildren:(id)sender{ 
    inputChildName = nameOfChild.text; 
    NSManagedObjectContext *context = [app managedObjectContext]; 
    Child * childrenName = [NSEntityDescription insertNewObjectForEntityForName:@"Child" inManagedObjectContext:context]; 
    childrenName.name = inputChildName; 
} 

我得到的错误是:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Child'' 

我正在使用iOS-5 XCode 4.2 ARC。请帮我解决这个问题,我已经花了数小时解决它,但我找不到任何解决方案。

+0

可我知道为什么我的问题已经否决了,我想谁也否决了我的问题的人,必须得到解决,那么请做更新的答案太。谢谢 – 2012-03-11 18:48:05

+1

如果你a)删除了多余的代码,并且b)解释了你已经尝试过的东西,那么你的问题会大大改善。正如你所看到的,有人已经提供了一些无用的建议,因为缺乏这方面的信息。 – 2012-03-11 19:38:57

+0

我认为它被拒绝了,因为这是一个糟糕的问题。你没有告诉我们你曾经尝试过什么,当人们试图提供帮助时,你基本上是指挥他们“给你解决方案”。我怀疑投票的人会为找到解决方案而烦恼。 – Emil 2012-03-11 19:40:09

回答

4

您的申请正在终止,因为您的managedObjectContext为零。检查它,如果它的零从委托复制它。您可以在-(IBAction)addChildren:(id)sender方法使用,如果条件

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(CoreDataBooksAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@", managedObjectContext); 
} 
+0

我希望这是问题,这将解决您的问题..这是你不会在教程中找到你追随它们的东西。 – 2012-03-11 19:37:47

+0

不错的对象封装;) – 2012-03-11 19:47:21

+0

@ Paul.s:是的。我相信那是他犯的唯一错误。就像我在几天前开始使用Core Data时所面临的问题一样。如果他多搜索一点,他会通过发布一个问题来节省时间。我从这里找到解决方案。 http://stackoverflow.com/questions/1632497/core-data-iphone-could-not-locate-an-nsmanagedobjectmodel – 2012-03-11 20:08:58

1

以下是该错误发生的可能性:

  • 错别字的实体名称。
  • 无管理的对象上下文对象。
  • 无法将包含实体的模型添加到上下文使用的持久存储 。
  • 未能将正确的持久存储添加到上下文本身。
+0

请告诉我解决方案,我已经检查过所有这些。 – 2012-03-11 18:50:36

+4

我强烈怀疑任何人都会在你的态度时关心给你解决方案。 – Emil 2012-03-11 19:02:32

+1

你在这一行检查了上下文“NSManagedObjectContext * context = [app managedObjectContext];” ?? 你确定你的上下文在他的位置不是空的? – aahsanali 2012-03-11 19:02:53