核心数据模型中实体模型的类名称必须包含应用程序名称.所以对于名为User的实体,模型编辑器中的类名必须是MyAppName.User.这样可以正常工作,直到我为我的项目添加了第二个目标.
新项目期望实体类名称为SecondAppTargetName.User.我们如何使用相同的核心数据模型来支持两个目标?我尝试使用${PRODUCT_NAME},而不是期望它能正常工作.它不行.
关于如何在目标之间分享一个核心数据模型的任何想法,并满足Swift项目需要在模型编辑器中将PRODUCT_NAME添加到该类中?
编辑:
从Apple documentation here出现,将模块名称添加到模型实体检查器中的类名称的前缀是首选行为.如果这样,这似乎是一个空洞,因为它排除了使用相同数据模型的多个目标.我还没有找到解决方法. SO上的一些帖子已经表明,在托管对象的Swift类定义前面使用@objc(ClassName)会做到这一点,但是我还没有能够验证.
解决方法
事实证明,答案似乎是在
this StackOverflow answer中关于相关问题的Swift文件中的类定义之上添加了@objc(ClassName)伪指令.至少这是XCode 6 beta 5在这个阶段的答案.
所以对于一个名为User的实体类,你需要:
@objc(User) class User: NSManagedobject { ...
我已经在两个目标项目中测试了这一点,并从模型实体检查器中删除了所有的前缀,它的工作原理.我想知道苹果为什么在文档中包含前缀要求,因为它使用相同的核心数据模型对多个目标进行约束.看来,@objc修复是正确的解决方案,也可能只是在这个beta阶段的临时解决方案.