未为测试目标生成核心数据类

Run*_*oop 7 unit-testing core-data objective-c ios

我使用Core Data自动生成的类.除了测试目标,我的项目还有3个目标.对于每个目标,正确生成Core Data类,我通过检查Derived Data文件夹进行验证.但是,尽管在核心数据模型文件中打勾,但不会为测试目标生成类.当我尝试引用测试目标中的一个Core Data类时,这会导致"未声明的标识符"和"使用未声明的类型"错误.我该如何解决这个问题?

ssc*_*ale 6

您不需要为每个测试目标生成额外的类 - 您的导入过程应该导入所有内容,并且不需要将任何文件添加到其他目标。

声明@testable import MyProject应该照顾一切。

在目标 C

@import MyProject;
Run Code Online (Sandbox Code Playgroud)


Sof*_*ner 5

在 Xcode 9.1 中.xcdatamodel也尝试将您的代码添加到测试目标中。所有自动生成的类也将被导入。

  • 请注意这一点,因为虽然它允许测试目标进行编译,但您最终会得到模型类型的重复定义。对我来说,它在获取实体时会导致运行时错误,因为“AppTarget.SomeModelClass”与“TestTarget.SomeModelClass”的类型不同。 (6认同)

Run*_*oop 2

这是由于 Xcode (8.3.1) 中当前存在一个错误,尽管项目编译成功,但在全局路径上无法找到自动生成的 NSManagedObject 类(codegen 设置为“类定义”)。解决这个问题的唯一方法是通过将每个实体的 codegen 设置为“Manual/None”来手动生成 NSManagedObject 类。