我想看看每个模型的基础模型,并可能更改它。我无法在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];
因此,据我所知,一旦模型创建,您就无法查看或更改模型所基于的模型。如果你需要清理你的模型层次结构,你必须有效地重新开始并重新创建每个所需的版本(至少你可以复制旧模型中的实体,所以你不是从头开始)。
答案 0 :(得分:0)
添加新版本的模型可让您更改模型。以前的版本允许核心数据自动迁移在早期版本下创建的持久存储。如果您编辑旧版本,则此迁移会中断。然后你开始谈论重命名,这是没有真正连接的。谈论改变版本所基于的模型是没有意义的 - 它只是同一模型的新版本。
一旦拥有多版本模型,您可以通过在项目浏览器中扩展模型的显示三角形来浏览版本IIRC。