【发布时间】:2015-03-27 16:36:40
【问题描述】:
我正在尝试使用内存存储测试我的应用程序与 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
【问题讨论】:
-
你是如何运行测试的?运行测试时模拟器是否启动?
-
该应用程序适用于 Mac,而不是 iOS,但是是的,该应用程序正在运行。
-
可能是命名空间问题。模型中的托管对象子类是否声明为
Package.RSFile?如果是这样,请尝试简化为RSFile。 -
不,我在阅读此处的帖子后尝试了该解决方案:jessesquires.com/swift-coredata-and-testing 但随后我的常规应用程序代码也崩溃了,说找不到命名空间类。所以我把它改回
RSFile。 -
也许您已将类添加到两个目标。相反,您应该在测试类中
import您的主应用程序包。
标签: macos cocoa unit-testing swift core-data