我在核心数据方面遇到了一些问题,所以我希望有人能够帮助我:)
第一个问题,我有一个看起来像这样的数据模型:
Entity P (A) <----> Entity R
/ | \
/ /\ \
/ / | \ \
C D E F G
我的所有实体都继承自同一个实体“P”,因为它们需要一个公共属性和一个公共关系(“A”和“R”)
我遇到的问题是,当您使用继承时,核心数据使用只为所有实体生成一个 sqlite 表。在我的情况下,这意味着我的数据库将只有 1 个表用于所有数据。我做了一些研究,发现它会产生性能问题(此外,我所有的实体属性都是瞬态的,并且在 willSave 期间,它们的值被聚合+加密到存储在“A”中的一个 NSData 中,所以我将无法使用谓词进行过滤并提高 SELECT 性能)。所以我决定删除“P”,并将“A”添加到“C”,“D”......,“G”中。问题出在“R”上,因为之前我只有一个反向关系,现在我每次创建一种新实体时都需要创建一个。所以我想删除所有的反向关系,是否可以?有时我需要使用 nil 上下文创建托管对象,然后我将它们插入上下文中,这可能就是为什么如果我在插入 MOC 之前设置非逆关系,核心数据不会自动设置逆关系?无论如何,我从不需要逆,所以即使我收到警告,我也可以避免定义它们吗?
第二个问题,在特定情况下,我需要在 MOC 保存期间创建一个新的“R”并将其分配给“C”、“D”、..、“G”。所以我想使用 willSave 但是,我不知道创建的实体是否会被保存。如果 MOC 对“insertedObjects”/“updatedObjects”/“deletedObjects”进行简单循环,并且对于它调用 willSave 的每个对象,执行保存,然后调用 didSave,这意味着我要修改数组它正在迭代,然后它应该崩溃吗?