2

我的应用程序使用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无法初始化。有人可以帮助我吗?

4

3 回答 3

10

这个问题在一个复杂的场景中发生在我身上。我在一个工作区中有两个 xcodeproj。

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

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

于 2015-04-11T14:42:26.003 回答
1

在这一行:

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

更改momdmom

于 2013-06-30T19:43:27.313 回答
0

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

- (NSManagedObjectModel *)managedObjectModel {
   if (!_managedObjectModel) {
     _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
   }
   return _managedObjectModel;
}
于 2013-07-08T08:27:31.213 回答