模型核心数据模型是否可以基于显示或更改?

时间:2012-10-31 03:14:32

标签: ios xcode core-data version xcdatamodel

我想看看每个模型的基础模型,并可能更改它。我无法在Xcode中找到任何地方。看来,一旦你创建了一个新的模型版本,并选择它所基于的模型(使用“编辑器/添加模型版本...”并选择以前模型的“基于模型”下拉),就没有办法看你的选择或改变它。

.xcdatamodeld和.xcdatamodel文件是包,您可以通过右键单击/“显示包内容”来检查它们。 .xcdatamodel文件包含名为“contents”的XML文件,但似乎没有以前模型的版本:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1811" systemVersion="11G63" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
    <entity name="Settings" syncable="YES">
        <attribute name="filterOrderArray" optional="YES" attributeType="Transformable" syncable="YES"/>
    </entity>
    <elements>
        <element name="Settings" positionX="160" positionY="192" width="128" height="60"/>
    </elements>
</model>

我还查看了项目的.xcodeproj文件(也是一个包),发现project.pbxproj文件包含这个:

/* Begin XCVersionGroup section */
        CFE0A83E164F6CF40000C765 /* Filters.xcdatamodeld */ = {
            isa = XCVersionGroup;
            children = (
                CFE0A841164F6D100000C765 /* Filters 1.3.xcdatamodel */,
                CFE0A83F164F6CF40000C765 /* Filters 1.2.xcdatamodel */,
            );
            currentVersion = CFE0A841164F6D100000C765 /* Filters 1.3.xcdatamodel     */;
            path = Filters.xcdatamodeld;
            sourceTree = "<group>";
            versionGroupType = wrapper.xcdatamodel;
        };
/* End XCVersionGroup section */

同样,没有以前的版本信息,除非它在那些十六进制字符串中,但Xcode / Project Navigation中的.xcdatamodel文件的顺序似乎确实由“children”参数确定。

我还发现重命名模型版本会破坏以前的版本连接(表明它存储在某个地方而不仅仅是版本的顺序),如果你这样做,initWithContentsOfURL将返回一个nil模型:

NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

因此,据我所知,一旦模型创建,您就无法查看或更改模型所基于的模型。如果你需要清理你的模型层次结构,你必须有效地重新开始并重新创建每个所需的版本(至少你可以复制旧模型中的实体,所以你不是从头开始)。

1 个答案:

答案 0 :(得分:0)

添加新版本的模型可让您更改模型。以前的版本允许核心数据自动迁移在早期版本下创建的持久存储。如果您编辑旧版本,则此迁移会中断。然后你开始谈论重命名,这是没有真正连接的。谈论改变版本所基于的模型是没有意义的 - 它只是同一模型的新版本。

一旦拥有多版本模型,您可以通过在项目浏览器中扩展模型的显示三角形来浏览版本IIRC。