我在Swift中使用Core Data有一个非常简单的应用程序。我正在创建一个测试,我想检查从JSON文件中正确导入的实体。我得到" EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)"尝试执行以下操作时出错:
let entities = SampleEntity.MR_findAll() as [SampleEntity]
let entitie = entities[0]
第二行失败了。如果我转换为[NSManagedObject]而不是[SampleEntity],它正在正常工作并获取实体。我之前在Objective-c中做过这个并没有遇到过这样的问题,但现在让它成功是一种挑战。
我已经阅读了其他几个线程,其中人们建议在数据模型定义的类字段中指定应用名称(例如" App.SampleEntity"),但这不起作用。
您可以在此找到完整测试的代码:
import Foundation
import XCTest
class MappingTests: XCTestCase {
override func setUp() {
super.setUp()
MagicalRecord.setDefaultModelFromClass(SampleEntity.classForKeyedArchiver())
MagicalRecord.setupCoreDataStackWithInMemoryStore()
}
override func tearDown() {
super.tearDown()
MagicalRecord.cleanUp()
}
func testSampleEntitiesAreProperlyImported() {
let bundle = NSBundle(forClass: MappingTests.classForKeyedArchiver())
let path = bundle.pathForResource("001", ofType: "json")
let jsonData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil)
let jsonArray = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: nil) as NSArray
for jsonDictionary in jsonArray {
// This line works properly
SampleEntity.MR_importFromObject(jsonDictionary)
}
let entities = SampleEntity.MR_findAll() as [SampleEntity]
let entity = entities[0]
}
}