gpt4 book ai didi

macos - 内存存储崩溃的核心数据单元测试

转载 作者:行者123 更新时间:2023-11-30 10:17:45 26 4
gpt4 key购买 nike

我正在尝试使用内存存储来测试我的应用程序与 CoreData 的交互,但是当我尝试转换从此调用中给出的对象时,代码崩溃了:

let newEntity: AnyObject = NSEntityDescription.insertNewObjectForEntityForName("File", inManagedObjectContext: moc)
let newFile = newEntity as RSFile

RSFile 在核心数据模型的 Class 字段中正确设置并包含在 中,并且此代码在正常应用程序中运行良好。我已经检查了托管对象模型是否已正确创建,并且所有内容似乎都已正确设置,但我最终在机器代码中的断点上方几行处出现了 “动态转换失败” 字符串。

此外,如果我将 newEntity 转换为 NSManagedObject 并放置一个断点以便我可以在运行时检查它,则所有内容都显示为有效,因此问题仅在于 Actor 阵容。我查看了其他建议,但找不到我的配置中缺少的任何内容。关于可能出什么问题有什么想法吗?

更新

我创建了一个示例项目,它演示了应用程序运行时的工作核心数据交互以及运行测试时的崩溃。 https://github.com/kujenga/CoreDataIssue

最佳答案

在一个简单的测试项目中,我让它像这样工作:

  1. 确保这些类没有添加到测试目标中。
  2. 在测试类之上导入您的 MyApp 包。
  3. 使用 as? 进行转换。

像这样:

var newEntity = NSEntityDescription.insertNewObjectForEntityForName(
"File", inManagedObjectContext: context) as? PSFile

编辑

在确定上述确实返回nil(仅在测试类中)之后,这是我的工作解决方案:

  1. 将测试中需要的所有类设为public,包括托管对象子类。
  2. 对于托管对象,您还需要将您想要访问的属性(property)公开。
  3. 不要将类添加到测试目标(如果这样做,转换将会失败)。
  4. 相反,请将 import YourAppName 添加到测试文件中。
  5. 使用无条件强制转换。

像这样[测试]:

let newEntity = NSEntityDescription.insertNewObjectForEntityForName(
"File", inManagedObjectContext: moc) as! RSFile

关于macos - 内存存储崩溃的核心数据单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29305731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com