Xcode 没有生成正确的 coredata 模型文件

Posted

技术标签:

【中文标题】Xcode 没有生成正确的 coredata 模型文件【英文标题】:Xcode not generating correct coredata model files 【发布时间】:2017-01-11 11:37:16 【问题描述】:

我在使用编辑器更改模型文件后生成我的核心数据模型 -> 创建 NSManagedObj...

我将实体关系更改为不同的实体(如果这很重要)

我清理了我的项目和构建文件夹。

但生成的文件似乎不正确,它们包含诸如“Entity.h”之类的文件 哪个不存在...因为我看到的唯一类文件是 'Entity+CoreDataClass.h'

所以我手动将名称更改为上述所有错误,然后出现链接器错误:

duplicate symbol _OBJC_CLASS_$_Userinfo in:
    /Users/Me/Library/Developer/Xcode/DerivedData/test-fxdxcviituhcmoegqygwirddhuir/Build/Intermediates/test.build/Debug-iphonesimulator/test.build/Objects-normal/x86_64/Userinfo+CoreDataClass.o
duplicate symbol _OBJC_METACLASS_$_Userinfo in:
    /Users/Me/Library/Developer/Xcode/DerivedData/test-fxdxcviituhcmoegqygwirddhuir/Build/Intermediates/test/Debug-iphonesimulator/test/Objects-normal/x86_64/Userinfo+CoreDataClass.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

最初我使用旧版本的 Xcode 创建项目,其中生成了诸如“Entity.h”之类的实体文件...这是更新后 Xcode 的某种错误吗?

我的实体正在使用“手动/无”代码生成选项。但是我注意到在构建具有上述链接器错误的实体后会自动更改为“类定义”?

编辑: 好的,因此将 codegen 设置为所有实体的类定义会阻止错误的文件导入错误。 (但之后仍然恢复为“手动/无”。除了我新创建的实体。 +CoreDataClass.m 文件的派生数据中存在错误的地方...导入名称中不包含 +CoreDataClass。 我的项目中的 +CoreDataClass.m 文件不包含此错误,并且使用 +CoreDataClass 是正确的。

我的项目生成文件:

#import "Userinfo+CoreDataClass.h"
#import "User+CoreDataClass.h"
@implementation Userinfo

@end

存在错误的地方:(在派生源中)

#import "Userinfo+CoreDataClass.h"
#import "User.h"
@implementation Userinfo

@end

【问题讨论】:

NSManagedObject subclasses duplicate declaration的可能重复 我遇到了一个非常相似的错误。你解决了吗? 如果我没记错的话,你必须更改类的名称并更改 codegen。更改代码生成不会自行更新。 【参考方案1】:

尝试点击项目。接下来单击“显示版本编辑器”(图片右上角的按钮)按钮并尝试查找重复的引用并将其删除。

应该解决问题

【讨论】:

感谢您的回复,发布后我找到了这个答案:***.com/a/39394426/2859891。更改名称并将 codegen 设置为“手动/无”,构建,然后再次更改名称似乎可行。但是 Xcode 仍然没有创建正确的导入名称。我必须将“+CoreDataClass”附加到每个导入。但这现在构建没有错误【参考方案2】:

我想我在选择实体后的 xcddatamodel 文件中找到了答案。在右侧面板上,您将看到“代码生成”下拉菜单。它可能默认为 Swift,将其更改为 Objective c 并构建项目。将生成您的文件。

【讨论】:

以上是关于Xcode 没有生成正确的 coredata 模型文件的主要内容,如果未能解决你的问题,请参考以下文章

为 CoreData 生成的类添加前缀

如何恢复丢失的 CoreData 模型版本?

CoreData 无法正确“创建 NSManagedObject 子类”Swift

Xcode 数据模型编辑器未出现

Xcode 显示在 CoreData 类上使用未声明类型

XCode4 无法正确生成 NSManagedObject 子类