如何在测试目标中访问Core Data生成的Obj-C类?

时间:2014-06-15 23:35:11

标签: core-data swift xctest

我在Xcode 6中有一个Core Data / Swift Cocoa应用程序项目(让我们调用项目Stuff)。我创建了一个名为Query的核心数据实体,并使用Xcode为它创建了一个NSManagedObject子类。

此时,Xcode 6提供了按照预期为我创建桥接标头,并创建了Stuff-Bridging-Header.h。在桥接标题中#import "Query.h"后,我的模型对象Query在我的应用目标Swift代码中可用。

如何将Query核心数据对象(由Xcode生成的Query.h和Query.m支持)提供给我的测试目标Swift代码StuffTests?我尝试手动创建头文件StuffTests-Bridging-Header.h并向其添加#import "Query.h",但我的Swift测试类无法解析Query类。

3 个答案:

答案 0 :(得分:1)

我在纯Swift中有一个CoreData项目,没有桥接头文件和测试正在运行。 以下是我的设法:

我的项目名称是 cars ,我有一个名为 Car 的NSManagedObject

Car.swift:

Car.swift

Car.swift文件目标成员资格:

Car.swift file Target Membership:

cars.xcdatamodeld数据模型检查器:

cars.xcdatamodeld Data Model Inspector

答案 1 :(得分:0)

您可以直接在Swift中使用NSManagedObject,如下所示:

class Query : NSManagedObject {
  @NSManaged var attrOne : attrOneType
  // ...
}

目前Xcode不会为实体生成Swift代码;它仍然只生成Objective-C,可能会引导您进行桥接解决方案。但是,您不需要桥接 - 只需从生成的Objective-C开始,并使用@NSManaged注释编写Swift代码。

答案 2 :(得分:0)

我花了一些时间来弄明白这一点。理想的解决方案是在测试目标本身中导入桥接头。进入Build Settings> Swift compiler> Code Generation并提供桥接标题的名称。 注意,默认情况下不选择测试目标。您必须在滚动条中选择它(它与General,info,build Settings,build Phases和Build Rules位于同一行)。 这样,您的项目和不同的测试目标都将拥有相同的桥接标题。