XCode无法'编辑核心数据模型

时间:2012-12-05 16:38:57

标签: ios core-data

使用

将CoreData模型添加到现有项目之后

File > New > File... > Core Data > Data Model

我无法编辑模型。该项目现在包含.xcdatamodeld包引用,但在Project Navigator中单击它与单击文件夹或组具有相同的效果,当前编辑器不会更改。同时右键单击参考并选择“打开为>”没有列出潜在的编辑。此外,打开文件检查器面板仅列出“身份”“目标成员身份”和“文本设置”的设置,它不会列出“核心数据模型”或“版本化核心数据模型”的设置

这并不会对XCodes识别文件类型的能力产生任何影响,但我在构建阶段也引用了CoreData.framework,并在AppDelegate中包含了必要的Core Data属性。

奇怪的是我在Finder中打开了.xcdatamodeld包以暴露内部.xcdatamodel(注意没有尾随'd')。双击该文件将按预期使用Core Data Model Editor打开XCode。

更奇怪的是,我创建了一个新的投影并点击了“使用核心数据”复选框。这样做允许我通过在Project Navigator中选择.xcdatamodeld引用来编辑数据模型。因此,我的机器和XCode能够并配置为编辑CoreData文件。

就好像XCode无法使用核心数据,除非原始项目是使用“使用核心数据”复选框创建的。

有没有人遇到过这个问题,你能解决它,以及如何解决?

谢谢!

8 个答案:

答案 0 :(得分:31)

原来我试图将数据模型添加到一个组中,该组引用了一个特定的文件夹来存储它的子项。但该文件夹不存在。这会导致XCode将数据模型放在项目根目录中,但同时将其引用为驻留在项目根目录上的2个目录。甚至更奇怪的是,XCode没有将文件显示为缺失,而是将其显示为红色。无论哪种方式,XCode在Project Navigator中单击时都会忽略该文件,因为它确实不存在于它认为的位置。故事的道德是:检查文件路径和配置的组路径。

答案 1 :(得分:29)

我今天遇到了这个问题,问题是我的.xcdatamodel文件在内部打包了(奇怪,我知道)。以下是我修复它的方法:

  1. 我在Finder中找到了File.xcdatamodel文件。
  2. 右键单击并选择显示包内容
  3. 里面是File.xcdatamodel的另一个副本。我将其复制到我的桌面。
  4. 然后我将该文件拖入Xcode并打开。
  5. 真是一种解脱。 :)我希望这可以帮助别人。

答案 2 :(得分:4)

我们真正的问题是Xcode在创建新版本时无法打开/验证数据模型。 含义:首先使用.xcdatamodel,然后使用Editor > Add Model Version... > MyProject 2(作为.xcdatamodel)。 之后,MyPoject.xcdatamodel d 已创建,但无法打开。

经过几个小时的调查,我们发现.xcurrentversion文件和项目文件中的XCVersionGroup丢失或无效。 其中一个原因是xcdatamodel d 版本应该在根文件夹中。

Easy Fast Solution 1:

创建新的模型版本并:

  1. 设置根文件夹的路径
  2. 指定Group为以前版本所在的子目录。
  3. 新的.xcdatamodel d 现在可以在Xcode上运行,但不能移动到根文件夹以外的任何地方

    复杂的解决方案2:

    要在子文件夹中使用.xcdatamodel d ,必须手动修改项目文件,然后执行以下步骤:

    PS:这是我演奏者写的最复杂,最苛刻的答案。对不起:(

    1. 在先前版本的同一目录中创建新的模型版本(即使它使数据模型无效)。
    2. 确保在目标中指定了新的.xcdatamodel d 文件。
    3. 在Finder中打开包内容,然后将所有xcdatamodel版本拖放到项目中。
    4. 在文本编辑器中打开project.pbxproj文件。
    5. 搜索所有数据模型的新文件并复制其fileId
    6. 示例:

      75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel in Sources */ = {isa = PBXBuildFile; fileRef = 75F319981B9D80D50030FF46 /* MyProject 2.xcdatamodel */; };
      // fileId = 75F3199D1B9D80D50030FF46 /* The first id at the beginning of the line */
      
      1. 将这些行从PBXBuildFile部分移至PBXFileReference部分的开头,然后像这样更新(重复使用fileId)。
      2. 示例:

        75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; };
        
        1. 现在搜索MyPoject.xcdatamodeld部分中的文件PBXBuildFile并复制其fileRef
        2. 示例:

          75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; };
          // fileRef = 75F319931B9D7FA50030FF46
          
          1. 最后,在project.pbxproj文件的最后,创建XCVersionGroup部分并重新使用xcdatamodel d 中的fileRef和所有fileId }。
          2. 示例(没有//条评论):

            /* Begin XCVersionGroup section */
                    75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */ = { // fileRed
                        isa = XCVersionGroup;
                        children = (
                            75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */, // fileId
                            75F319A11B9D80D50030FF46 /* MyProject.xcdatamodel */, // fileId
                        );
                        currentVersion = 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */; // fileId of the current version
                        name = MyProject.xcdatamodeld;
                        path = Path/To/MyProject.xcdatamodeld; // set the correct path
                        sourceTree = "<group>";
                        versionGroupType = wrapper.xcdatamodel;
                    };
            /* End XCVersionGroup section */
                };
                rootObject = 7564EB681B4AB1560065394B /* Project object */;
            } /* EOF */
            
            1. 您现在应该可以从所需的子文件夹中打开Xcode中的xcdatamodel d 文件。
            2. 现在从xcode中删除单个xcdatamodel文件的额外引用(在开头创建的文件)。
            3. 很抱歉答案很长......但问题解决了:D

答案 3 :(得分:2)

这仍然是Xcode 8中的一个问题。

对我来说,简单的解决方案是将我的.xcdatamodeld文件从(黄色)子组文件夹中拖动(在项目文件导航器窗格内 - Xcode的左侧)到应用程序下的最高级别(一个用蓝色图标)。 在那之后,它立即与编辑一起打开。

我通过将其拖回子组重新进行测试,并且它再次无法在编辑器中打开,然后返回到顶层并正确打开... 我不知道为什么会这样,但至少我可以再次编辑它。

希望这有助于某人。

答案 4 :(得分:1)

重新启动Xcode通常会解决此问题。

答案 5 :(得分:1)

以下是我解决问题的方法:

  1. 在Xcode文件树中,删除了.xcdatamodeld文件。
  2. 当我打开项目文件夹时,文件就在那里。 (Xcode仅删除了引用。)
  3. 我已将其拖回Xcode文件树,选中“如果需要则复制项目”。它没有复制,因为了解该文件已经在项目文件夹下。
  4. 问题解决了。

答案 6 :(得分:0)

在第一次选择时会发生这种情况,但是选择另一个类然后返回到dataModel允许在没有CoreData的情况下编辑新项目,然后将coreData模型添加到项目中。

只是想一想,您是否添加了实体,或者您甚至无法访问数据模型视图?

答案 7 :(得分:0)

我在Xcode中解决了这个问题:

右键单击您的项目(不是您的项目文件夹,我的意思是一个带有蓝色Xcode图标!),而不是选择“新文件”并选择正确的用于保存数据模型的文件夹。

注意:单击项目文件夹本身或其某个子文件夹上的“新建文件”无法以某种方式工作..