我的应用程序存在问题,从数据库中删除大量数据需要很长时间。所以我开始调试并发现,值转换器是问题所在!
为了查看问题,我创建了一个隔离问题的项目......
我有以下内容:
+-----------+ +-----------+
| Entity A | | Entity B |
+-----------+ +-----------+
| | | property |
| b | 1:1 | a |
+-----------+ +-----------+
所以Entity A
与 有 1:1 的关系Entity B
。并且Entitiy B
有一个名为property
Transformable 的属性,并且有一个 ValueTransformer。A 到 B 的删除规则无效。
现在我创建 A 和 B 的一个实例,将它们链接起来并将一些内容写入属性。保存上下文,一切都按预期工作。
现在我想删除Entity A
. 我创建了一个获取请求,并删除了所有实体。在我的示例中,我这样做:
context.perform {
let fetchRequest = NSFetchRequest<EntityA>(entityName: "EntityA")
guard let allEntities = try? context.fetch(fetchRequest) else { return }
for entity in allEntities {
context.delete(entity)
}
try? context.save()
}
现在,当保存发生时,值转换reverseTransformedValue
器被调用。我不明白为什么?!?因为我没有访问该属性...我没有设置或获取它...
如果有人可以为我提供一些启示,那就太酷了。
我在这里也有我的示例项目:https ://www.dropbox.com/s/651dmyughosr90p/ValueTransformerIssue-Sample.zip?dl=0