我正在尝试使用内存存储库测试我的应用程序与CoreData的交互,但是当我尝试转换此调用给出的对象时代码崩溃:
let newEntity: AnyObject = NSEntityDescription.insertNewObjectForEntityForName("File", inManagedObjectContext: moc)
let newFile = newEntity as RSFile
RSFile
在核心数据模型的Class字段中正确设置并包含在其中,此代码在正常应用程序中正常工作。我已经检查了托管对象模型是否正确创建,并且所有内容似乎都已正确设置,但我最终在机器代码中使用"dynamic cast failed"
字符串在断点上方几行。
此外,如果我将newEntity
转换为NSManagedObject
并放置断点以便我可以在运行时检查它,那么一切看起来都是有效的,所以问题仅在于强制转换。我已经查看了其他建议但我无法从配置中找到任何遗漏。关于什么可能出错的任何想法?
更新
我创建了一个示例项目,演示了应用程序运行时的工作核心数据交互以及运行测试时的崩溃。 https://github.com/kujenga/CoreDataIssue
答案 0 :(得分:1)
在一个简单的测试项目中,我让它的工作原理如下:
as?
投射。像这样:
var newEntity = NSEntityDescription.insertNewObjectForEntityForName(
"File", inManagedObjectContext: context) as? PSFile
修改强>
在确定上述确实返回nil
之后(仅在测试类中),这是我的工作解决方案:
public
中创建所需的所有类,包括托管对象的子类。 import YourAppName
添加到测试文件中。像这样[测试]:
let newEntity = NSEntityDescription.insertNewObjectForEntityForName(
"File", inManagedObjectContext: moc) as! RSFile