找不到'.momd'文件

lou*_*nsa 2 core-data ios

我的应用程序使用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;
    }
Run Code Online (Sandbox Code Playgroud)

后来,我访问managedObjectContext:

    self.managedObjectContext = self.document.managedObjectContext;
Run Code Online (Sandbox Code Playgroud)

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

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

问题是当我尝试指定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;
}
Run Code Online (Sandbox Code Playgroud)

无法找到momd的文件,因此managedObjectModel无法初始化.任何人都可以帮助我吗?

Ben*_*n G 10

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

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

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