gpt4 book ai didi

core-data - 我可以在具有删除规则的关系的实体上使用 NSBatchDeleteRequest 吗?

转载 作者:行者123 更新时间:2023-12-02 04:19:21 26 4
gpt4 key购买 nike

我正在尝试使用 NSBatchDeleteRequest 删除一堆实体,其中许多实体都有删除级联和/或无效规则。

我第一次尝试删除任何内容失败,并且返回的 NSError 包含字符串“批量删除不支持删除规则”。我原以为删除这些东西就可以了,但我有责任在保存之前确保满足所有约束。

我应该能够批量删除这些托管对象吗? (我想保留删除规则,其他删除路径没有简单的方法来知道要删除哪些对象集)在这种情况下某些类型的批量删除有效,但其他类型则无效? (假设谓词失败,但对象 ID 列表有效?)

最佳答案

批量删除存在关系问题。

它直接进入数据库并删除暂停所有对象图规则的记录,包括删除规则。您已正确确定了需要再次自行进行所有约束检查的要求。 (这本身就可能会破坏交易。)

即使您设法正确删除实体和所有必要的相关实体,核心数据在后台创建的(不透明)连接表中仍然会留下大量条目。没有明显的安全方法来删除连接表中的条目,并且据报告它们会干扰将来操作中的关系管理。

IMO,这种情况下的解决方案仍然是使用对象图,而不是批量删除和优化性能。关于如何做到这一点,SOF 有很多很好的答案,但其中大部分可以总结为以下几点:

  • 找到合适的批量大小进行保存(通常创建 500 个实体,删除大约 2000 个实体,但这可能会根据对象大小和关系复杂性而有所不同 - 您必须进行试验)。
  • 如果您有内存限制,请使用autoreleasepool
  • 使用后台上下文来释放 UI 以进行交互。我更喜欢在更新 UI 后在后台保存到数据库。

关于core-data - 我可以在具有删除规则的关系的实体上使用 NSBatchDeleteRequest 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915874/

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