我正在使用核心数据的iOS项目。我正在使用swift。核心数据堆栈设置正确,似乎都很好。 我已经为实体(NSManagedObject)创建了一个名为TestEntity的类。 类看起来是这样的:Swift无法在Xcode测试中测试核心数据?
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。
这个工作,但是,当我运行测试此行仍然崩溃:
let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity
所以我发现,这是其他人的问题: How to access Core Data generated Obj-C classes in test targets?
哪有我们获得了核心数据,可以在swift中进行测试。我没有在应用程序目标中使用桥接标头,并且这一切都很好。测试目标仍然崩溃。
如何修复测试目标,以便它可以运行核心数据测试?
试试这个:http://stackoverflow.com/a/26568813/438063 – Lucien
看到一些更多的笔记[在这个SO回答] [1]'加入@objc(ClassName)'的方法。 [1]:http://stackoverflow.com/a/29445352/2466193 –
看到一些更多音符[在该SO回答] [1]的 '加入@objc(类名)' 的方法。 [1]:http://stackoverflow.com/a/29445352/2466193 –