2012-10-31 44 views
0

我想看看我的每个模型都基于哪种模型,并且可能会对其进行更改。我一直无法在Xcode中找到任何地方。看起来,一旦你创建了一个新的模型版本,并选择它所基于的模型(使用“编辑器/添加模型版本...”,并选择一个与“基于模型”下拉的前一个模型),没有办法看到你的选择或改变它。核心数据模型的模型是基于显示还是更改?

.xcdatamodeld和.xcdatamodel文件是软件包,您可以通过右键单击/“显示软件包内容”来检查它们。该.xcdatamodel文件包含一个名为“内容”的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中/工程通航.xcdatamodel文件的顺序似乎确实被确定“儿童”参数。

我还发现,重命名模型版本打破了以前版本的连接(这表明它是保存在某个地方,是不是版本只是顺序),如果你这样做initWithContentsOfURL会返回一个零模式:

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

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

回答

0

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

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

+0

谢谢,但我明白这一切。我一直在创建我的模型的新版本。有一次我有50个版本。大多数来自不同级别的测试,我不记得什么型号是基于以前的版本。我需要删除所有不需要的版本,并将它们重命名为更好的名称。问题不在于如何看待所有模型,而是如何判断模型的基础版本以及信息的存储位置。 – Symmetric

+1

你有任何实际使用任何旧版本的应用程序吗?如果没有,你可以通过删除其他版本来清理。每个版本都是完整的结构,除了迁移以外,它不依赖于其他版本的存在。 – jrturton

+1

哇,我刚刚不同意你的看法,即每个版本都是完整的结构,但我想到我可能对“添加模型版本”有什么误解。我认为当前选定的版本已被复制为新版本,稍后在编译.mom文件时或在迁移期间使用“基于模型”。我只做了一些测试,看起来实际上是复制的“基于模型”版本,而当前选择的模型仅用于将新版本定位到列表中。这解释了很多! – Symmetric