我试图在Xcode中自动创建NSManagedObject子类(2个相关实体)。它们是这样生成的:
但是,在我做任何事情之前,当我尝试构建并运行它时,会发生链接错误,如下所示:
duplicate symbol _OBJC_CLASS_$_Photo in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o
duplicate symbol _OBJC_METACLASS_$_Photo in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o
duplicate symbol _OBJC_CLASS_$_Photography in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o
duplicate symbol _OBJC_METACLASS_$_Photography in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o
ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我曾多次尝试创建新项目并做同样的事情。我的初衷是将一些自定义方法添加到子类中。但是当我添加任何内容时,例如Photo+CoreData.h/m
,出现与上述相同的错误。
我找到了一些关于“双重包含”或“将文件保存到错误的目录”的答案,但我没有这样做。有人对此有任何想法吗?
编辑:感谢@iPeter的一些帮助,找到了以下内容:
在执行编辑>生成NSManagedObject文件后,如果在构建之前删除文件,则项目应该不会产生任何问题。
然后#import“myManagedObjectName + CoreDataClass.h”(其中MO名称是核心数据中实体检查器中的名称)到您需要这些托管对象的任何类中。
换句话说,您不需要文件夹中的任何实际ManagedObject文件。 Xcode将生成的文件保存在Derived Data文件夹中。
如果由于某种原因您需要将这些文件保留在文件目录中,则以下解决方法将起作用。转到Target并删除Compile Sources中的CoreDataClass源。
离开你这个:
刚刚为任何感兴趣的人写了a blog post that includes this info。
您需要删除自己生成的CoreData相关子类,并且可以将#import行保留在这些类中,现在所有这些文件将在构建项目时自动生成。
晚了...但对我来说只是一个实体的复制粘贴,Xcode似乎没有改变与实体相关的原始类名(在Xcode 9.0.1上观察到)
我最近尝试了上面的答案,但失败了。不知何故,Xcode仍在生成文件。
我用以下方法解决了它:
这听起来像是Xcode中的一个bug ...