使用 RestKit 和 CoreData 获取对象并将其与先前保存的对象相关联

Posted

技术标签:

【中文标题】使用 RestKit 和 CoreData 获取对象并将其与先前保存的对象相关联【英文标题】:GET object and relating it to a previously saved object using RestKit and CoreData 【发布时间】:2014-06-17 14:30:08 【问题描述】:

我需要使用从网络服务器下载的外国 id 来关联实体。我有一个事件 - 类别(一个事件有类别,一个类别有很多事件)。获取所有类别的 Web 服务,以及获取所有事件的第二个 Web 服务。

这是网络服务返回的 json:

分类:

[ 
  "id" : "1",
    "name" : "music",
  ,
   "id" : "2",
    "name" : "sports",
  ,
   "id" : "3",
    "name" : "meetup"
  
]

事件:

[ 
   "category_id" : "1",
    "description" : "free concert",
    "id" : "7791"
  ,
   "category_id" : "2",
    "description" : "Running event",
    "id" : "8357"
  
 ]

我将 category_id 保存在我的事件实体上(两个实体的 RestKit 映射工作正常)。

现在,为了显示事件的类别,我需要获取 category_id 并对核心数据执行获取请求,而不是使用 getter (event.category.categoryID)。

有没有办法在对事件进行 GET 后配置 RestKit(和/或 CoreData)以关联这两个实体?我正在使用 RestKit 0.20.3。

【问题讨论】:

【参考方案1】:

我的错,我没有仔细阅读文档。以下是如何做到这一点(基于this *** 的回答):

NSEntityDescription *eventEntity = [NSEntityDescription entityForName:NSStringFromClass([Event class]) inManagedObjectContext:store.mainQueueManagedObjectContext];
NSRelationshipDescription *categoryRelationship = [eventEntity relationshipsByName][@"category"];
RKConnectionDescription *connection = [[RKConnectionDescription alloc] initWithRelationship:categoryRelationship attributes:@ @"categoryID": @"categoryID" ];

//entity mapping is the event's mapping like: RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName...
[entityMapping addConnection:connection];

必须在 Core Data 中正确配置关系“类别”。

对我来说,成功了。

【讨论】:

以上是关于使用 RestKit 和 CoreData 获取对象并将其与先前保存的对象相关联的主要内容,如果未能解决你的问题,请参考以下文章

在 RestKit 中使用 RKObjectManager 从 CoreData 获取

CoreData 和 RestKit

如何在 segue 中从 CoreData 获取结果

CoreData & RestKit - 从多个来源获取相同的实体类型

无法让 Restkit 0.20 + CoreData 工作

使用 RestKit 和 CoreData 同步修改对象的正确方法