Swift无法在Xcode测试中测试核心数据吗?

祖玛

我正在使用核心数据的iOS项目上工作。我正在迅速。核心数据堆栈设置正确,一切似乎都很好。我为称为TestEntity的实体(NSManagedObject)创建了一个类。该类如下所示:

import UIKit
import CoreData

class TestEntity: NSManagedObject {
    @NSManaged var name: NSString
    @NSManaged var age: NSNumber
}

因此,然后我尝试使用以下代码行在代码中插入新的TestEntity:

let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity

然后我得到这个错误:

在此处输入图片说明

我在堆栈溢出中看到了一些答案,这些答案说我需要担心模块名称。因此,然后我在文档上进行了查找:https : //developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html

然后,我进入TestEntity的核心数据实体,并在类字段中输入myAppName.TestEntity

当我运行应用程序时,此行:

let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity

仍然给我同样的错误。

我还能做错什么?

编辑:因此,我能够通过将TestEntity NSManagedObject类更改为来使应用程序不再崩溃:导入UIKit导入CoreData

@objc(TestEntity) class TestEntity: NSManagedObject {
    @NSManaged var name: NSString
    @NSManaged var age: NSNumber
}

因此,我在其中添加了@objc(TestEntity)。无论在核心数据数据模型检查器的TestEntity类名称之前添加appName或不添加appName,此方法都可以使用。

这行得通,但是,当我运行测试时,此行仍然崩溃

let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity

因此,我发现这对其他人来说是一个问题:如何在测试目标中访问Core Data生成的Obj-C类?

我们如何才能使核心数据迅速在测试中工作我没有在应用程序目标中使用桥接头,并且一切正常。测试目标仍然崩溃。

如何确定测试目标,使其可以运行核心数据测试?

约翰福德

使用Xcode 7和@testable,您不再需要更新managedObjectClassName或使用其他技巧。这是我为使其在Xcode 7.2中工作而要做的事情。

  1. 设置测试目标主机应用程序,然后选中“允许测试主机应用程序API”。

在此处输入图片说明

  1. 确保所有常规类都没有指向Test目标的Target Membership。仅将具有单元测试代码的类设置为“测试”目标。

在此处输入图片说明

  1. @testable添加到所有测试类的顶部:
import XCTest
@testable import MyApp

class MyAppTests: XCTestCase {
}

如果您仍然遇到问题,则可能需要尝试以下其他技巧:https : //forums.developer.apple.com/message/28773#28949

我与这个战斗了一段时间,希望它能帮助其他人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章