【问题标题】:Error in iPhone core dataiPhone核心数据错误
【发布时间】:2012-03-28 07:09:46
【问题描述】:

我的AppDelegate.h

#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。请帮我解决这个问题,我已经花了几个小时解决它,但我找不到任何解决方案。

【问题讨论】:

  • 我可以知道为什么我的问题被否决,我认为投反对票的人一定已经得到了解决方案,那么请也更新答案。谢谢
  • 如果您 a) 删除了多余的代码,并且 b) 解释了您已经尝试过的内容,那么您的问题将会大大改善。如您所见,有人已经提出了无用的建议,因为缺少这些信息。
  • 我认为它被否决了,因为这是一个糟糕的问题。你没有告诉我们你尝试了什么,当人们试图提供帮助时,你基本上是在命令他们“给你解决方案”。我怀疑投反对票的人会费心寻找解决方案。
  • 没有 cmets 的 downvotes 完全没用。对我来说,这个问题很有用,因为答案很好。恕我直言,跟踪这个错误并不容易。

标签: iphone objective-c cocoa-touch core-data


【解决方案1】:

您的应用程序正在终止,因为您的 managedObjectContext 为 nil。检查它,如果它的 nil 从委托复制它。您可以在 -(IBAction)addChildren:(id)sender 方法中使用此 if 条件

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

【讨论】:

  • 我希望这就是问题所在,这将解决您的问题..这是您在教程中找不到的内容..
  • @Paul.s:是的。我确信这是他犯的唯一错误。几天前,当我开始使用 Core Data 时,我也遇到了同样的问题。如果他搜索得更多一点,他会通过发布问题来节省时间。我从这里找到了解决方案。 stackoverflow.com/questions/1632497/…
【解决方案2】:

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

  • 实体名称中的错字。
  • Nil 托管对象上下文对象。
  • 未能将包含实体的模型添加到持久化 存储上下文使用。
  • 未能将正确的持久存储添加到上下文本身。

【讨论】:

  • 请告诉我解决方案,我已经检查了所有这些。
  • 如果你的态度是这样,我强烈怀疑有人会愿意为你提供解决方案。
  • 你检查过上下文“NSManagedObjectContext *context = [app managedObjectContext];” ??你确定你的上下文不是空的吗?
猜你喜欢
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2014-07-05
相关资源
最近更新 更多