objective-c - 如何确定/控制托管对象模型 (.mom) 文件的存储位置?

标签 objective-c cocoa core-data ios4 preloader

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

下面是一些相关的代码片段。

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

    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;
}

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

提前致谢!

最佳答案

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

关于objective-c - 如何确定/控制托管对象模型 (.mom) 文件的存储位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440745/

相关文章:

具有不同语言的 iPhone 应用程序

Obj-c.h 函数原型(prototype)中需要 C++ 结构

ios - UILocalNotification 在 ios7 中只触发一次

objective-c - 在 macOS 上获取当前用户的桌面路径

iphone - 工作日 EEE 的 NSDateFormatter 问题

objective-c - 关闭 NSWindow 而不激活下面的窗口

cocoa - 以编程方式从文件路径获取文件名和扩展名 cocoa ?

iphone - 我们可以在核心数据中设置主键吗

ios - Core Data Swift - 不创建 SQLite 文件

swift - 从 Swift Core Data 中的许多关系中获取属性