0

我想看看我的每个模型都基于什么模型,并可能改变它。我无法在 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];

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

4

1 回答 1

0

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

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

于 2012-11-11T07:47:25.800 回答