使用 RestKit 创建子对象
Posted
技术标签:
【中文标题】使用 RestKit 创建子对象【英文标题】:Create child object with RestKit 【发布时间】:2014-01-05 17:56:47 【问题描述】:我是 RestKit 的新手,但到目前为止一切似乎都说得通,我已经为这样的 User 对象设置了一些对象映射
+ (NSArray *) responseDecriptorsForEntityMapping:(RKEntityMapping *)entityMapping
NSDictionary *mappings = @
@"id": @"userID",
@"firstName": @"forename",
@"lastName": @"surname",
@"phoneNumber": @"phone",
@"emailId": @"email",
@"uri": @"uri",
;
[entityMapping addAttributeMappingsFromDictionary:mappings];
[entityMapping setIdentificationAttributes:@[@"userID"]];
// Setup response descriptors
RKResponseDescriptor *getDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping
method:RKRequestMethodGET
pathPattern:@"users/:userID"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
return @[getDescriptor];
这是从另一个为对象管理器设置映射的类调用的。这工作正常,并且从服务器查询用户对象工作正常,这很好。
我现在想要的是创建一个子记录。我的User
对象包含与devices
的关系。我现在要做的是创建一个新的Device
对象并将其插入到用户的devices
集合中。
有没有一种方法可以创建不需要我指定整个 URL(即 /users/:userID/devices)并让 RestKit 自动计算的映射?
如果不是,那没关系,我可以手动设置,但是第二个问题,创建对象并将其放入集合的一般技术是什么?我是否可以像往常一样创建对象,然后一旦成功创建,只需使用正常的核心数据方法来添加新设备,还是可以配置 RestKit 为我做这件事?
【问题讨论】:
您收到的是什么 JSON?您是否考虑过将路线与您的路径模式一起使用? 我简要了解了路线,但没有深入了解。我将收到的 json 将是我刚刚创建的Device
的一个简单对象
那么您是在创建此设备并将其发布到服务器吗?在这种情况下,您的设备需要一个 userID
属性,RestKit 可以使用该属性来填充路径模式(通常通过路由定义)。
那么我需要在Device
类中添加一个userID 变量吗?是否需要在核心数据存储中持久化?
不,它可以是暂时的 - 它只需要在您使用对象调用 POST 时进行设置。我没有尝试在路径模式中添加键路径(导航关系以获取 id) - 可能值得快速实验......
【参考方案1】:
您通常使用RKRoute
来指定在使用指定类的对象发出特定类型(GET / POST / ...)的请求时要使用的路径模式。路由检查对象以提取适当的参数以替代路径模式。
配置路由后,只需 POST 对象而不提供 POST 方法的路径。这会导致对象管理器搜索与类型和类标准匹配的路由,以便它可以构建所需的路径。
发布时,您可以自己创建对象,RestKit 将使用收到的响应更新它并将更新保存到上下文中。
【讨论】:
又搞糊涂了。所以我更详细地查看了路由器,创建路由似乎很容易,但是我该如何创建映射呢?我可以看到实际添加我创建的映射的唯一方法是使用响应描述符,但我认为使用路由器意味着不需要响应描述符? 路由器用于发送(从模式生成发送到的路径)。响应描述符用于检查“传入”模式并决定应用哪个映射(因此目标类是什么)。 路由器实际上与映射过程无关,它完全是关于路径管理的。 啊,好吧是有道理的。使用核心数据创建新对象的一般方法是什么,因为无法使用[Class new],但是从0.1中删除了旧的[Class object]。我是否只使用标准的核心数据方法,是否有新方法? 标准核心数据方法。当您收到响应时,您可以将该对象视为要填充的存根。以上是关于使用 RestKit 创建子对象的主要内容,如果未能解决你的问题,请参考以下文章