restkit 0.20:无法将 NSManagedObject 传递给 getObject: 方法
Posted
技术标签:
【中文标题】restkit 0.20:无法将 NSManagedObject 传递给 getObject: 方法【英文标题】:restkit 0.20: can not pass in an NSManagedObject to the getObject: method 【发布时间】:2014-02-06 05:30:16 【问题描述】:我只是想从我的宁静服务中检索一件物品(确认工作)
http://www.example.com/person/25
我需要以某种方式传入 URL 的“25”部分。我认为我应该使用 RKRoute。在 RestKit 中执行这个的方法是使用 RKObjectManager 的 getObject: 方法。
使用 RestKit 0.22 我不知道如何调用 getObject: 方法,因为它需要一个完整的 Person 对象,不是吗?即使我只需要传入字符串'25'。
有问题的方法是:[self getObject:personNSManagedObject path:nil parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) .....
我不能只说“Person *person = [[Person alloc] init],因为 Person 是一个 NSManagedObject。
但是当我这样做时:
NSManagedObjectContext *moc = self.managedObjectStore.mainQueueManagedObjectContext;
NSEntityDescription *person = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc];
Person *personNSManObj = [[Person alloc] initWithEntity:person insertIntoManagedObjectContext:nil];
personNSManObj.id = 3;
我收到以下错误:
执行到临时目标 objectID 的对象映射。结果可能 如果没有获得永久对象 ID,则无法访问。 restkit.network:RKResponseMapperOperation.m:457 检索失败 ID 为 0x1664ac90 的现有对象
有什么想法吗?
【问题讨论】:
【参考方案1】:您应该将新对象保存回持久存储区。数据加载和映射发生在不同的线程上,但会尝试将数据映射回提供的对象。因为对象已插入但未保存,所以它有一个临时托管对象 ID,RestKit 尝试将其转换为对象但不能。保存将在数据存储中创建一个“存根”对象,RestKit 将使用响应数据完全填充该对象(假设成功)。
另一种方法是提供带有所需键/值对的字典,该键/值对将插入到路由中。 RestKit 然后将为您创建目标对象。
【讨论】:
嗨 Wain,哇,非常感谢您的帮助。我正在考虑走字典路线。你能告诉我我会在哪个班级提供这本词典吗?我在 RKRoute 文档中没有看到接受 NSDictionary 的参数。谢谢! 路由与提供的类匹配,因此您当前与托管对象类匹配,但您可以将其更改为字典(或其他自定义对象)' @user798719 你能接受这个作为正确答案吗?以上是关于restkit 0.20:无法将 NSManagedObject 传递给 getObject: 方法的主要内容,如果未能解决你的问题,请参考以下文章
无法让 Restkit 0.20 + CoreData 工作
RestKit 0.20 映射问题(使用来自 API 的 JSON)