与this question相似或相关。
说我有一个对象类" Zoo"。它与(抽象)类型" Animal"的对象有很多关系。因此,Animal属于Zoo对象,并拥有属性动物园'并且Zoo对象具有属性' animals'。
但是,我通常对具体的子实体更感兴趣,例如Giraffe或Monkey。
我想要一个名为" giraffes"和"猴子",还有财产"动物"。我想创建Giraffe对象并将它们添加到Zoo。
这将如何运作?我不能在长颈鹿和猴子的关系中指明它的反面是"动物园"因为这将无效(在核心数据编辑器中)。
我一般都在使用子类,但我总是能够问他们属于哪个Zoo,所以需要一个通用的接口。
非常感谢您的帮助,如果有任何我可以澄清的话,请告诉我。
答案 0 :(得分:0)
我认为你选择了一种很难得到你想要的东西。像下面一样创建你的图表,你可以获取你需要的一切。当你取一只特定的动物(让我们说一只猴子)时,你总能得到与其他实体的关系。
zoo - >> (对许多人来说)动物 - > (对一个)animalType
答案 1 :(得分:0)
根据您的描述,我会考虑删除动物园< - >动物关系,因为你不经常使用它,这将是一个负担维持。该关系还包含可能大量的项目,因此您需要比单独允许的关系更精细的控制。而且,通过其他关系,您可以指定删除语义。
您喜欢使用特定方法,因此在Zoo
和每个动物子实体之间添加显式关系。如果需要,在每个上面指定删除规则(因此破坏Zoo
杀死所有动物)。每只动物都会有zoo
的链接,并且会被恰当地命名。
对于知道所有Zoo
的{{1}},请使用获取请求。您不经常使用它,当您这样做时,您应该真正指定批处理断层方法。
除了:
通常,您应该将关系简单地用作获取请求的数据源,特别是以便您可以指定批处理错误方法。即使您有50只长颈鹿,这可能比您在任何时候都可以在UI上显示的更多。如果您正在进行数据操作,那么直接使用该关系可能会很好。但是,如果您在UI上列出项目,则应使用获取请求,其中谓词使用该关系来过滤相应的对象。
答案 2 :(得分:0)
感谢所有建议。最后,我有一个动物园 - 动物关系,在Zoo对象上我写了几个帮助者:
@property (nonatomic, readonly) NSArray *giraffes; // or monkeys
- (NSArray*)giraffes
{
NSArray *giraffes = [Giraffe MR_findByAttribute:@"zoo"
withValue:self
andOrderBy:@"name"
ascending:YES
inContext:self.managedObjectContext];
return giraffes;
}
基类比你想象的更重要,并且知道核心数据会缓存很多,如果我相当频繁地调用它,性能就不会成为问题。
(如果API调用看起来有点奇怪,我会使用MagicalRecord。)