Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据-与子实体的多对多关系,与抽象实体中的反向关系?_Ios_Macos_Inheritance_Core Data_Entity Relationship - Fatal编程技术网

Ios 核心数据-与子实体的多对多关系,与抽象实体中的反向关系?

Ios 核心数据-与子实体的多对多关系,与抽象实体中的反向关系?,ios,macos,inheritance,core-data,entity-relationship,Ios,Macos,Inheritance,Core Data,Entity Relationship,与……相似或可能相关 假设我有一个对象类“Zoo”。它与(抽象)类型“动物”的对象有一对多的关系。因此,动物属于动物园对象,并且具有属性“Zoo”,动物园对象具有属性“anies” 然而,我通常对具体的子实体更感兴趣,比如长颈鹿或猴子 我想有一个关系的财产称为“长颈鹿”和“猴子”,但也财产“动物”。我想创建长颈鹿对象并将它们添加到动物园 这是怎么回事?我无法在关系长颈鹿和猴子中指定其逆项为“zoo”,因为这是无效的(在核心数据编辑器中) 我通常使用子类,但我需要始终能够询问它们属于哪个动物园,因

与……相似或可能相关

假设我有一个对象类“Zoo”。它与(抽象)类型“动物”的对象有一对多的关系。因此,动物属于动物园对象,并且具有属性“Zoo”,动物园对象具有属性“anies”

然而,我通常对具体的子实体更感兴趣,比如长颈鹿或猴子

我想有一个关系的财产称为“长颈鹿”和“猴子”,但也财产“动物”。我想创建长颈鹿对象并将它们添加到动物园

这是怎么回事?我无法在关系长颈鹿和猴子中指定其逆项为“zoo”,因为这是无效的(在核心数据编辑器中)

我通常使用子类,但我需要始终能够询问它们属于哪个动物园,因此需要一个公共接口


非常感谢您的帮助,如果有什么需要我澄清的,请告诉我。

我想您选择了一条艰难的道路来获得您想要的东西。如下图所示创建图表,您可以获取所需的一切。当你取回一种特定的动物(比如猴子)时,你总能得到它们与其他实体的关系


根据你的描述,我会考虑删除动物园动物的关系,因为你不经常使用它,这将是一个负担。关系还可能包含大量的项,因此您需要比关系本身更细粒度的控制。并且,对于其他关系,您可以指定删除语义

您喜欢使用特定的方法,因此在
Zoo
和每个动物子实体之间添加显式关系。如果需要,请指定每一项的删除规则(因此销毁
Zoo
会杀死所有动物)。每只动物都有一个到
动物园的链接
,并将适当命名

对于
动物园
了解所有
动物
,使用获取请求。您不经常使用它,当您使用它时,您应该真正指定批处理错误方法

旁白:


通常,您应该简单地将该关系用作获取请求的数据源,特别是为了指定批处理错误方法。即使你有50只长颈鹿,这可能比你在任何时候在UI上显示的都要多。如果您正在执行数据操作,那么直接使用关系可能会很好。但是,如果要在UI上列出项目,则应使用fetch请求,其中谓词使用关系来过滤适当的对象。

感谢所有建议。最后,我与动物园的动物建立了关系,我在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。)

你想如何处理
长颈鹿
/
猴子
关系?你以为他们会为你提供方便吗?好吧,出于保密的原因,我可以告诉你他们不是长颈鹿或猴子,而是别的什么。虽然它们是“哺乳动物”,但它们基本上是完全不同的,我很少把它们当作动物来关注,而是作为它们独特的类群。还应该说我不完全理解你问我的问题。你真的有多个
Zoo
实例吗?如目前所述,您需要添加许多关系。但是,无论如何,使用取回请求通常比使用关系要好……因此,建立一个动物/动物园关系,然后有一个取回请求,名为
长颈鹿
猴子
,对吗?如何在CoreData编辑器中编写该获取请求?我不是什么专家,但对我来说,请求缓存结果是很重要的,因为我调用
.giraffes
.monkeys
的频率比
.animals
高,那么
添加GiraffesObject:
呢(我使用并喜欢mogenerator)
addGiraffesObject:
是编辑关系的方法。使用fetch请求不会缓存结果,但是您真的需要多久迭代一次完整的
长颈鹿列表
,而不进行任何筛选/考虑批处理错误?我明白了,那么当我对动物类型执行fetch时,它将返回一个具体子类的集合。好主意。这只是意味着我该怎么做<代码>添加长颈鹿对象:??然后我会在只调用
addanimalobject:
的子类中实现这个方法吗?事实上,我可能会使animalType成为抽象基类上的一个枚举。是的,我想你是对的。定义animalType并将其添加到animal对象之后,您可以向zoo添加一组动物对象或单个对象。我将提供一些提示。动物园是一种硬件,动物是一种设备。设备在功能上可能有很大的不同,但它们都有共同的属性,如硬件服装等。因此,能够将动物添加到我的动物园,并能够看到我的整个动物收藏是很有趣的,虽然一般来说,我对直接访问设备类型感兴趣,因为它们基本上彼此关系不大。。。。也许这更好地描述了我的要求。当然,但这不会改变任何事情,因为你对动物园/动物的解释很好。我的答案是基于您描述的需求/交互频率/数据大小/代码简单性。是的,那么我将研究获取请求。如果他们的结果被缓存,那么它应该被证明是相当快的。在我看来,任何动物都应该知道它属于哪个动物园,我可以把一只动物放进动物园。我是