我的应用使用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
。有人可以帮助我吗?
答案 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;
}