我正在尝试使用 NSBatchDeleteRequest 删除一堆实体,其中许多实体具有删除级联和/或无效规则。
我第一次尝试删除任何内容失败,并且返回的 NSError 包含字符串“批量删除不支持删除规则”。我原以为删除这些东西很好,但我有责任在保存之前确保满足所有约束。
我应该能够批量删除这些托管对象吗? (我想保留删除规则,其他删除路径没有简单的方法来知道要删除哪些对象集)在这种情况下某些类型的批量删除有效,但其他类型则无效? (假设谓词失败,但对象 ID 列表有效?)
批量删除存在关系问题。
它直接进入数据库并删除暂停所有对象图规则(包括删除规则)的记录。您已正确确定了需要再次自行进行所有约束检查的要求。 (这本身就可能会破坏交易。)
即使您设法正确删除实体和所有必要的相关实体,您仍然会在(不透明)中留下大量条目连接表核心数据在后台创建。没有明显的安全方法来删除连接表中的条目,并且据报告它们会干扰将来操作中的关系管理。
IMO ,这种情况下的解决方案仍然是使用对象图而不是批量删除和优化性能。关于如何做到这一点,SOF 上有很多很好的答案,但大多数可以总结为以下几点:
- 找到合适的批量大小进行保存(通常创建 500 个实体,删除大约 2000 个实体,但这可能会根据对象大小和关系复杂性而有所不同 - 您必须进行实验)。
- 如果您有内存限制,请使用
autoreleasepool
s.
- 使用后台上下文来释放 UI 进行交互。我更喜欢在更新 UI 后在后台保存到数据库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)