【发布时间】:2012-09-24 12:58:39
【问题描述】:
我在核心数据方面遇到了一些问题,所以我希望有人能够帮助我:)
第一个问题,我有一个看起来像这样的数据模型:
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,这意味着我要修改数组它正在迭代,然后它应该不会崩溃?
【问题讨论】:
-
RE 逆问题。您不必明确设置反向关系。只要您在架构中设置了反向关系,那么当您以一种方式添加关系时,CoreData 会自动为您设置反向关系。
-
1,如果用“nil” MOC创建对象,设置关系,然后将对象分配给MOC,似乎不是这种情况。第二,我不想在模式中定义逆,如果我必须这样做,每次我将创建一个新实体时,我都必须创建它的逆。
标签: ios core-data nsmanagedobject nsmanagedobjectcontext