首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSManagedObjectModel mergedModelFromBundles错误

NSManagedObjectModel mergedModelFromBundles错误
EN

Stack Overflow用户
提问于 2012-02-12 14:53:09
回答 1查看 2.8K关注 0票数 2

我正在使用核心数据,在我的应用程序一开始就将数据放入数据库时遇到了很多问题。

下面是我从一篇教程中摘取的一些代码。下面概述了我获得SIGABRT的要点。感谢您的任何建议或帮助

代码语言:javascript
复制
//THIS FUNCTION IS CALLED AFTER MY APP DID FINISHING LOADING IN THE 
//    IN THE APP DELEGATE
-(void)loadData
{
    NSManagedObjectContext *context = [self managedObjectContext];

    NewModel *newModel = (NewModel *)[NSEntityDescription insertNewObjectForEntityForName:@"NewModel" inManagedObjectContext:context];

    //ADD MORE DATA TO ENTITY
}

/**
 Returns the managed object context for the application.
 If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
 */
- (NSManagedObjectContext *) managedObjectContext {

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

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    else
    {
        NSLog(@"Error");
    }        
    return managedObjectContext;
}


/**
 Returns the managed object model for the application.
 If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
 */
- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
/**********************************************************/    
    //  SIGABRT HAPPENS IN THE NEXT LINE OF CODE
/**********************************************************/    
    managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];    
    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:@"NewModel.db"];
    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

    // Put down default db if it doesn't already exist
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:storePath]) {
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"LeagueModel" ofType:@"sqlite"];
        if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
        }
    }

    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator;    
}

/**
 Returns the path to the application's Documents directory.
 */
- (NSString *)applicationDocumentsDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-12 15:13:42

如果你查看苹果的文档:

代码语言:javascript
复制
mergedModelFromBundles:

返回一个通过合并在给定包中找到的所有模型创建的模型。

代码语言:javascript
复制
+ (NSManagedObjectModel *)mergedModelFromBundles:(NSArray *)bundles

参数

代码语言:javascript
复制
***bundles***

要搜索的NSBundle实例的数组。如果指定为nil,则搜索主包。

代码语言:javascript
复制
***Return Value***

通过合并捆绑包中找到的所有模型创建的模型。

您正在传递nil,而您需要传递bundle的数组,这就是崩溃的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9247031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档