我有一个场景,其中有一个实体可以拥有X个项目,具体取决于用户添加的内容。我有另一个实体需要与任意数量的第一个实体建立关系。这很容易,只需创建从第二个实体到第一个实体的一对多关系。
我遇到的问题是,如果第二个实体可以获取第一个实体的每个多个数,该怎么办?我不知道该怎么做。
实施例: 实体A包含:x,y,z 实体B可以包含(例如):x中的3个和y中的7个。或者8个x,7个y,2个z。全部取决于用户在应用中选择的内容。
答案 0 :(得分:2)
CoreData不允许您建模(直接)关系,您可以将同一个对象多次添加到多对多关系中。
在您的情况下,您有两个我能想到的选项,它们都要求您为新的中间件关系实体建模。
假设您有实体A
和B
。您现在需要创建一个实体AtoB
,其中AtoB
结构为:
关系:
a:与A
实体的一对一关系
b:与B
实体的一对一关系
B
中手动保留您喜欢的对象bCount
的数量:A
链接到B
时,您都会增加现有关系的数量,或者使用正确的值创建新的AtoB
对象(注意重复)AtoB
实体链接到A
实体时添加尽可能多的B
关系(无唯一性):在大多数情况下,我更喜欢第一种选择。
A
实体和B
实体与AtoB
实体之间存在多对多关系。
您可以保持已经拥有的B
到A
之间的多对多关系,因为我确信它有其目的。
答案 1 :(得分:0)
在此示例中,有一个User实体可以有多个列表,但列表也可以有多个用户。然后列表也有任务,但这些任务也可以是多个列表的一部分。
例如
用户:强> 杰夫 罗斯
<强>解释强> 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"];