设置新对象与现有对象之间的关系

时间:2015-02-23 05:27:37

标签: ios objective-c cocoa-touch core-data

我在核心数据方面遇到了这个问题而且我不知道该去哪里...我找不到与我类似的任何问题所以我在这里问你这个问题:

我有一个核心数据模型,我有几个实体,但最重要的是中心点实体称为活动,其他实体与这个。其中一个是 Group 实体。在Acitivity和Group表之间存在多对多关系 在我从后端获取任何活动之前,我需要为我想要的活动选择组。这样我需要先获取并保存到数据库组之前 - 这很好...... 但是在保存组之后,我需要获取活动,每个活动都有许多组(已经在核心数据中),我需要在这些组之间建立连接。

我假设我需要获取所有组并使用来自Activity的那些组进行检查,之后我需要在Groups实体中找到它并将其添加到Activity?

我必须告诉你,我上面写的场景远非逻辑和简单的解决方案,这就是我关注它的原因。 有关如何在新对象与现有对象之间设置此关系的任何想法?

详细说明

当用户打开应用时,它有一个空Core Data。因此,要填写它,他必须选择一些组,并根据此选择应用程序能够发送包含活动的时间表请求。因此,如果选择了组,则用户切换到时间表视图,并从API下载带有活动的时间表。每个活动中都有组,但我想使用我已创建的组而不是向Core Data添加新组。

看看一些代码示例: 首先,我向API发出请求以获取所有组,并在响应中获得JSON:

[
  {
    "id": 507,
    "name": "KrDZIs3011Io",
    "category": 1,
    "category_name": "grupa dziekańska",
    "regular": true
  },
  "..."
]

所以我这样处理:

for (id group in responseObject) {
    Group *groupEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Group" inManagedObjectContext:tempContext];

    groupEntity.name = [group valueForKey:@"name"];
    groupEntity.cashID = [group valueForKey:@"id"];
    groupEntity.caseInsensitiveName = [[group valueForKey:@"name"] lowercaseString];
    groupEntity.selected = @NO;
}

我会跳过我要检查重复项并保存MOC的部分。
此应用程序能够获取用户选择的组(groupEntity.selected = @YES)并基于此创建时间表请求。作为回应,用户得到类似的东西:

{  
   "_id":"g552g3328",
   "params":{  
      "group_id":[  
         552,
         3328
      ]
   },
   "version":"5096146ca522d316c87b217b83a6c4d2",
   "activities":[  
      {  
         "id":18282,
         "places":[  
            {  
               "id":97,
               "name":"Paw. C s. A",
               "full_name":"Pawilon C sala A",
               "regular":true
            }
         ],
         "tutors":[  
            {  
               "id":266,
               "name":"prof. UEK Paweł Lula",
               "short_name":"P. Lula",
               "moodle_url":"https://e-uczelnia.uek.krakow.pl/course/view.php?id=1034",
               "regular":true
            }
         ],
         "groups":[  
            {  
               "id":552,
               "name":"KrDZIs3011Io",
               "type":1,
               "type_name":"Grupa dziekańska"
            },
            {  
               "id":553,
               "name":"KrDZIs3011Si",
               "type":1,
               "type_name":"Grupa dziekańska"
            },
            {  
               "id":554,
               "name":"KrDZIs3012Si",
               "type":1,
               "type_name":"Grupa dziekańska"
            }
         ],
         "category":1,         
         "category_name":"wykład",
         "name":"Teoria grafów",
         "regular_course":true,
         "notes":"",
         "url":"",
         "date":"2014-02-07",
         "day_of_week":5,
         "day_of_week_text":"Pt",
         "starts_at":"9:35",
         "ends_at":"14:45",
         "regular_schedule":true,
         "starts_at_timestamp":1391765400,
         "ends_at_timestamp":1391771100,
         "unit_ordinal_number":"1",
         "unit_total_count":"15",
         "canceled":false,
         "canceled_reason":""
      },
      ...
   ]
} 

如您所见,我有一系列活动,每个活动都有一组组(已在数据库中但未链接)。
所以我在这里为活动创建新的实体时间表和新实体,当我到Activity中的Groups数组时,我应该如何将它链接到我在数据库中已有的组?

0 个答案:

没有答案