我想看看我的每个模型都基于什么模型,并可能改变它。我无法在 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];
因此,据我所知,一旦创建模型,您就无法查看或更改模型所基于的模型。如果您需要清理模型层次结构,您必须有效地重新开始并重新创建每个需要的版本(至少您可以从旧模型中复制实体,这样您就不会完全从头开始)。