我最近玩弄了很多核心数据,让我烦恼的是你创建了一个 .xcdatamodeld 来创建你的基础结构,然后 xcode 将它转换成一个 .momd 文件
我的问题是:是否可以以编程方式进行转换,而不是由 xcode 完成?
例如,假设我们不能在 iOS 应用程序中从 Internet 下载 xcdatamodeld 文件,并让它解释它并创建底层基础。
如果你下载整个xcdatamodeld
包(它是一个目录)并解压它,你可以使用我momcom项目中的代码将它编译成.momd
. 然后,您可以像任何其他数据模型一样加载它。这个项目在某种程度上仍然是实验性的,但到目前为止它在测试中表现良好。[更新:该项目无法在 iOS 上运行,因为它使用NSXMLDocument
. 如果你想试试这个,你可以使用TouchXML
,它被设计为NSXMLDocument
. 我不知道在您自己的应用程序中编译核心数据模型的任何其他选项。]
关于数据模型和持久存储匹配的通常规则适用。除非您处理模型迁移,否则您不能只使用新编译的模型并将其与现有商店一起使用。另外,我不知道 Apple 对下载新数据模型文件的应用程序的态度是什么——这可能很好,或者可能会给你带来一些麻烦。
您可以使用 Apple 的momc脚本从xcdatamodeld 源创建一个 momd 文件。
一个 xcdatamodeld “source” 目录被编译成一个 momd 部署目录,一个 xcdatamodel “source” 文件被编译成一个 momd 部署文件。
如何使用脚本:
打开终端并转到 Developer bin 文件夹
cd /Applications/Xcode.app/Contents/Developer/usr/bin/
在您的 xcdatamodeld 文件上运行momc脚本
用法:momc 源目标
示例(放置扩展名很重要):
./momc input.xcdatamodeld 结果.momd
不,您不能从 Internet 下载 xcdatamodeld 文件并使其正常工作。如果你这样做,你的程序会因为错误的数据模型而崩溃。您的数据模型需要在主包中,并且您必须选择当前数据模型。核心数据维护模型版本和一些关于你的数据模型的信息。即使您更改模型并且不迁移模型,您的程序也会崩溃,您必须从设备/模拟器中删除应用程序。
但是,您可以下载 .sqlite 数据库,但数据模型应该相同。