核心数据模型文件不在捆绑包中
Posted
技术标签:
【中文标题】核心数据模型文件不在捆绑包中【英文标题】:Core data model file is not in bundle 【发布时间】:2012-11-15 18:00:18 【问题描述】:我重新排列了我的程序文件夹中的文件,将它们分组到适当的子文件夹中。我确保它们都显示在编译的源列表中,包括“xcdatamodeld”文件。
但是,创建托管对象模型不适用于以下代码:
if (mom_ != nil)
return mom_;
self.mom = [NSManagedObjectModel mergedModelFromBundles:nil];
return mom_;
我检查了[NSBundle mainBundle]
,特别是
[[NSBundle mainBundle] pathForResource:@"Words" ofType:@"xcdatamodeld"]
和
[[NSBundle mainBundle] pathForResource:nil ofType:@"xcdatamodeld"]
他们都返回零。当我按名称和类型检查它们时,我可以看到其他资源在那里。
应用包文件中有一个名为“Words.momd”的文件夹。
可能发生了什么以及如何解决?
【问题讨论】:
【参考方案1】:尝试使用:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Words" withExtension:@"momd"];
您要加载编译后的数据模型,而不是 xcdatamodeld 文件:
数据模型是一种部署资源。除了模型中实体和属性的详细信息之外,您在 Xcode 中创建的模型还包含有关图表的信息——它的布局、元素的颜色等等。运行时不需要后面的信息。模型文件使用模型编译器 momc 进行编译,以去除无关信息并使资源的运行时加载尽可能高效。
(source)
【讨论】:
这解决了问题,可能是我在未来开发中想要使用的。我在阅读文档时看到了这一点,但没有抓住重点。我仍然不知道为什么mergeModelFromBundles
不起作用。我过去使用它没有问题。【参考方案2】:
您可以使用 MagicalRecords 框架:
https://github.com/magicalpanda/MagicalRecord
并在一行代码中设置您的数据库:
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"Words"];
【讨论】:
这可能会在以后使用,但它并没有告诉我发生了什么。以上是关于核心数据模型文件不在捆绑包中的主要内容,如果未能解决你的问题,请参考以下文章