objective-c - 无法使用 nil 模型创建 NSPersistentStoreCoord

我第一次破解 Core Data,在我的设备上运行我的代码时遇到以下错误,但它在模拟器上运行良好..

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model'

我的一些可能导致问题的方法:

    - (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:@"RugbyOnTv" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
    return __managedObjectModel;
}

/**
 Returns the persistent store coordinator for the application.
 If the coordinator doesn't already exist, it is created and the application's store added to it.
 */
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (__persistentStoreCoordinator != nil)
    {
        return __persistentStoreCoordinator;
    }

    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"RugbyOnTV.sqlite"];

    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];    
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

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


    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return __persistentStoreCoordinator;
}


    - (NSString *)applicationDocumentsDirectory {

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
        return basePath;
    }

编辑

我从 Apple 的 CoreDataBooks 中复制并粘贴了 managedObjectContext 方法(如下),现在它可以工作了。虽然不太清楚为什么

- (NSManagedObjectModel *)managedObjectModel {
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
    return managedObjectModel;
}

最佳答案

我收到与原始帖子完全相同的错误消息。我为此挣扎了好几个小时。 这是我的 AppDelegate.m 中的这一行。

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[same with name of xcdatamodeld]" withExtension:@"momd"];

对于那些搜索此错误消息并找到此线程的任何人....先试试这个。

您必须确保它说的 [与 xcdatamodeld 的名称相同]....是的! 出于某种原因,我的项目名称中有我的项目名称,而不是数据模型名称。

更改了它,它立即工作......

感谢 Rock & Muller 的贡献......你救了我很多天!!

天然气。

关于objective-c - 无法使用 nil 模型创建 NSPersistentStoreCoordinator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7361187/

相关文章:

objective-c - 数字后的 "f"

ios - 横向模式下的 iPhone 应用程序,2008 系统

iphone - 如何拦截点击 UITextView 中的链接?

objective-c - ViewController 响应选择器 : message sent

objective-c - 如何在 Xcode 中定义预处理器符号

objective-c - 如何获取 Root View Controller ?

objective-c - 在Objective-C中将一个类的实例转换为@protocol

iphone - Xcode 调试器 : view value of variable

objective-c - 按名称创建objective-c类实例?

objective-c - 从 NSString 中删除字符?