【问题标题】:How to Determine/Control Where Managed Object Model (.mom) File is Stored?如何确定/控制托管对象模型 (.mom) 文件的存储位置?
【发布时间】:2024-01-13 06:51:01
【问题描述】:

伙计们,所以我有这个预加载器(Xcode 命令行实用程序项目),它可以预加载我的 iPhone 应用程序的 sqlite 商店,它一直工作得很好,因为它总是给我一个不兼容的商店错误。因此,我不会在预加载器中引用 .mom 文件,而是在预加载器中创建它以希望绕过这个问题。这就是我的问题所在,我如何确定预加载器将我创建的 .mom 文件存储在哪里?有什么方法可以告诉它放在哪里?

下面是一些相关的sn-ps代码。

从 iPhone 应用程序中: /** 返回应用程序的托管对象模型。 如果模型尚不存在,则通过合并应用程序包中找到的所有模型来创建它。 */ - (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    //managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

    NSURL *modelURL = [NSURL fileURLWithPath:@"path/to/Parking.mom"];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

#pragma mark TODO change below line to search for your project's mom file
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Parking" ofType:@"mom"];
    return managedObjectModel;
}

从预加载器(Xcode 命令行实用程序项目)中:

NSManagedObjectModel *managedObjectModel(NSString* momPath) {

    static NSManagedObjectModel *model = nil;

    if (model != nil) {
        return model;
    }
    model = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

    //NSURL *modelURL = [NSURL fileURLWithPath:momPath];
    //model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

    return model;
}

如果您仔细查看代码,您会发现我在哪里交换了每个文件中的内容。

提前致谢!

【问题讨论】:

    标签: objective-c cocoa core-data ios4 preloader


    【解决方案1】:

    使用 -initWithContentsOfURL: 从您喜欢的任何地方读取托管对象模型文件。事实上,这样做可能会解决您的错误......可能是您的包中有一个旧模型文件,并且使用 +mergedModelFromBundles: 将其添加到您的其他模型文件中。

    【讨论】:

      最近更新 更多