[英]Core data one to many relationship
我有一个场景,其中有一个实体可以有X个项目,具体取决于用户添加的内容。我有另一个实体需要与任意数量的第一个实体建立关系。 这很容易,只需创建从第二个实体到第一个实体的一对多关系。
我遇到的问题是,如果第二个实体可以采用第一个实体的多个数字怎么办? 我不知道该怎么做。
示例:实体A包含:x,y,z实体B可以包含(例如):x中的3和y中的7。 或者8个x,7个y,2个z。 全部取决于用户在应用中选择的内容。
CoreData不允许您建模(直接)关系,您可以将同一个对象多次添加到多对多关系中。
在您的情况下,您有两个我能想到的选项,它们都要求您建模一个新的中间件关系实体。
假设您有实体A
和B
您现在需要创建一个实体AtoB
,其中AtoB
结构是:
关系:
一个:对一关系到A
实体B:对一关系到B
实体
bCount
手动保留您喜欢的对象B
的计数: A
到B
您将增加现有关系的计数或使用正确的值创建新的AtoB
对象(注意重复) A
实体链接到B
实体时添加尽可能多的AtoB
关系(无唯一性): 在大多数情况下,我更喜欢第一种选择。
A
实体和B
实体将与AtoB
实体具有多对多关系。
你可以保持从B
到A
的多对多关系,因为我确信它有其目的。
在此示例中,有一个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.