找不到'.momd'文件

时间:2013-06-30 18:54:13

标签: ios core-data

我的应用使用CoreData,其模型名为:mupo-ios.xcdatamodel。此模型是原始模型的第二个版本:Model.xcdatamodeld。我在文档中使用了managedObjectContext

        NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
        url = [url URLByAppendingPathComponent:@"MyDocument"];

        self.document = [[UIManagedDocument alloc] initWithFileURL:url];

        // Set our document up for automatic migrations
        NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                                 [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];            
        self.document.persistentStoreOptions = options;
    }

之后,我访问了managedObjectContext

    self.managedObjectContext = self.document.managedObjectContext;

现在,我想直接访问主要上下文,这是代码:

- (NSManagedObjectContext *)mainContext {
    if (!_mainContext) {
        _mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        _mainContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
    }
    return _mainContext;
}

问题在于我尝试指定managedObjectModel

- (NSManagedObjectModel *)managedObjectModel {
    if (!_managedObjectModel) {
NSString *localModelPath = [[NSBundle mainBundle] pathForResource:@"mupo-ios" ofType:@"momd"];
        NSURL *modelUrl = [NSURL fileURLWithPath:localModelPath];    
        _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl];
    }
    return _managedObjectModel;
}

无法找到momd的文件,因此无法初始化managedObjectModel。有人可以帮助我吗?

3 个答案:

答案 0 :(得分:10)

在复杂的情况下,我遇到了这个问题。我在一个工作区中有两个xcodeproj。

我尝试在第二个项目中使用相同的xcdatamodeld文件,方法是将其从第一个项目拖到第二个内部xcode 。这正确地创建了一个引用,但即使将文件添加到“编译资源”,也没有创建modm文件。

解决方案是直接将xcdatamodeld拖放到Finder的第二个项目而不是xcode中的第一个项目。

答案 1 :(得分:1)

在这一行:

NSString *localModelPath = [[NSBundle mainBundle] pathForResource:@"mupo-ios" ofType:@"momd"];

momd更改为mom

答案 2 :(得分:0)

我用这种方式解决了问题(我不完全理解它为什么会起作用):

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