我无法在Swift项目中的两个目标中使用我的核心数据模型

dav*_*ell 16 core-data ios restkit swift

Core Data模型中实体模型的类名必须在其前面加上应用程序名称.因此,对于名为User的实体,模型编辑器中的类名必须是MyAppName.User.这工作正常,直到我向我的项目添加第二个目标.

新项目期望实体类名称为SecondAppTargetName.User.我们如何使用相同的核心数据模型支持两个目标?我尝试使用$ {PRODUCT_NAME} .User,而不是期望它能够正常工作.它不起作用.

有关如何在目标之间共享一个核心数据模型以及满足Swift项目的需求以使PRODUCT_NAME在模型编辑器中加入类的任何想法?

编辑:从Apple文档中可以看出,在模型实体检查器中将模块名称作为类名添加前缀是首选行为.如果是这样,这似乎是一个巨大的漏洞,因为它排除了使用相同数据模型的多个目标.我还没有找到解决办法.SO上的一些帖子表明在托管对象的Swift类定义前面使用@objc(ClassName)可以解决这个问题,但我还没有能够验证.

dav*_*ell 14

事实证明,答案似乎是在Swift文件中的类定义之上添加了@objc(ClassName)指令,如本StackOverflow中关于相关问题的答案中所述.至少这是XCode 6 beta 5在这个阶段的答案.

因此,对于名为User的实体类,您需要:

@objc(User)
class User: NSManagedObject {
    ...
Run Code Online (Sandbox Code Playgroud)

我在一个双目标项目中对此进行了测试,并从模型实体检查器中删除了所有前缀并且它可以正常工作.我想知道为什么Apple会在其文档中包含前缀要求,因为它使用相同的核心数据模型对多个目标施加限制.看来@objc修复是正确的解决方案,或者只是在此测试阶段的临时解决方案.