ios – 我不能在Swift项目的两个目标中使用我的核心数据模型

核心数据模型中实体模型的类名称必须包含应用程序名称.所以对于名为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阶段的临时解决方案.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...