在 coredata 和 restkit 本地更新托管对象的属性
Posted
技术标签:
【中文标题】在 coredata 和 restkit 本地更新托管对象的属性【英文标题】:Updating the attribute of managed object locally in coredata and restkit 【发布时间】:2012-07-19 15:58:59 【问题描述】:自从 15 天以来,我一直在使用 RestKit。一旦我从远程接收到数据,我还希望能够在本地编辑属性并保存。
我尝试了几种不同的方法,但似乎都没有奏效;
user.attribute = @"new valuel";
[[[RKObjectManager sharedManager].objectStore managedObjectContextForCurrentThread] save:&error];
if(error)
NSLog(@"Error saving %@", error);
第二种方法是将值分配给实例本身并保存;
user.attribute = @"new valuel";
[user.managedObjectContext save:&error ];
NSlog(@"%@", error)
再试一次,
[[RKObjectManager sharedManager].objectStore save:&error];
似乎我无法获得指向上下文的指针。怎么可能得到指针,或者可能是保存对象,还是完全不可能?这些都不会保存到数据库中,也不会引发任何错误。这里有什么问题?
【问题讨论】:
您是否进行了调试以查看您在调用时尝试使用的NSManagedObjectContext
的值?如果指针是nil
,它将静默失败。
好的,我已经检查过了,但 managedObjectContext 不是 nil ...但它不会更新属性。
只要我在映射issueMapping.identificationAttributes = @[ @"resourceURI" ];
上定义了某种主键,RestKit 就会在何时进行合并。
【参考方案1】:
我也有同样的问题。我也在尝试你的步骤,然后用 Firefox 插件打开数据库,我可以检查 db 是否没有更新。
如果我找到任何最终解决方案,我会通知您...
更新:
我终于让我的代码工作了,添加了方法 refreshObject:mergeChanges。最后我的代码是这样的:
// Make changes in managedObjectYouWantToSave
[managedObjectYouWantToSave.managedObjectContext refreshObject:managedObjectYouWantToSave mergeChanges:YES];
[managedObjectYouWantToSave.managedObjectContext save:&error];
【讨论】:
refreshObject:mergeChanges:
是 managedObjectContext 的方法,而不是 managedObject..以上是关于在 coredata 和 restkit 本地更新托管对象的属性的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用RestKit将本地数据存储在Core data中而无需网络通信
RestKit 在映射或实际插入 CoreData DB 之前比较本地对象和远程对象
使用 RestKit 0.2 从 CoreData 获取本地数据
我可以防止 RestKit+CoreData 覆盖本地实体更改吗?