繁体   English   中英

核心数据一对多关系

[英]Core data one to many relationship

我有一个场景,其中有一个实体可以有X个项目,具体取决于用户添加的内容。我有另一个实体需要与任意数量的第一个实体建立关系。 这很容易,只需创建从第二个实体到第一个实体的一对多关系。

我遇到的问题是,如果第二个实体可以采用第一个实体的多个数字怎么办? 我不知道该怎么做。

示例:实体A包含:x,y,z实体B可以包含(例如):x中的3和y中的7。 或者8个x,7个y,2个z。 全部取决于用户在应用中选择的内容。

CoreData不允许您建模(直接)关系,您可以将同一个对象多次添加到多对多关系中。

在您的情况下,您有两个我能想到的选项,它们都要求您建模一个新的中间件关系实体。

假设您有实体AB 您现在需要创建一个实体AtoB ,其中AtoB结构是:

关系:
一个:对一关系到A实体B:对一关系到B实体

  1. 第一个选项将允许您在属性bCount手动保留您喜欢的对象B的计数:
    1. 每次用户链接AB您将增加现有关系的计数或使用正确的值创建新的AtoB对象(注意重复)
  2. 第二个选项是让用户在A实体链接到B实体时添加尽可能多的AtoB关系(无唯一性):
    1. 需要时手动或通过分组获取这些项目的计数

在大多数情况下,我更喜欢第一种选择。

A实体和B实体将与AtoB实体具有多对多关系。

你可以保持从BA的多对多关系,因为我确信它有其目的。

多对多的示例

在此示例中,有一个User实体可以有多个列表,但列表也可以有多个用户。 然后列表也有任务,但这些任务也可以是多个列表的一部分。

例如

用户: 1。Jeff 2. Rose

列表: 1。购物2.家庭作业3.家务

任务: 1,2,3,4,5。

〔实施例

Rose -> Shopping   -> Task 1, Task 3, Task 4
     -> Chores     -> Task 2, Task 4

Jeff -> Homework   -> Task 3, Task 5
     -> Chores     -> Task 2, Task 4

编辑

这就是您如何显示有关用户及其数据的不同信息。

// Fetch user 
User *user = [self getUserWithName:@"Rose"];

// Loop through lists
for (List *listObject in [user lists])
{
    // PRINT: (List Name) : (# of Tasks)
    NSLog(@"%@ : %lu", [listObject listName], (unsigned int)[[listObject tasks] count]);
}

例如,这将打印以下输出,因为我们为示例提供了数据。

Shopping : 4 
Chores   : 2

编辑2:

如果您在实体用户任务下创建userId字段并为每个用户创建userId,那么您可以使用与上面相同的模型,仅使用简单的NSPredicate,根据用户过滤掉任务。

[NSPredicate predicateWithFormat:@"userId == %@", @"123456789"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM