我正在使用核心数据的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中工作而要做的事情。
@testable
行添加到所有测试类的顶部:import XCTest
@testable import MyApp
class MyAppTests: XCTestCase {
}
如果您仍然遇到问题,则可能需要尝试以下其他技巧:https : //forums.developer.apple.com/message/28773#28949
我与这个战斗了一段时间,希望它能帮助其他人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句