2016-01-21 72 views
1

问题:我沿着AFNetworking库使用Realm。为了保持干净,我正在使用自定义序列化程序解析传入的json响应并将它们映射到对象。返回的对象a比保存,更新或在某些情况下转发。问题是有些关系会被覆盖,我需要执行一种部分更新。Objective-C:部分更新领域中的对象

有没有办法在域中复制持久化对象并将其值添加到非持久化对象,并仅使用响应值更新?

实施例:

当前状态:

cat{ 
    name: "kitty" 
    owners: ["peter"] 
} 

传入响应:

cat{ 
    name:"pussy" 
    owner:[] 
} 

通缉的结果:

cat{ 
    name:"pussy" 
    owner:["peter"] 
} 

回答

2

我们只是更新了that section of the Realm documentation来澄清此行为。

不幸的是,因为'nil'也是Realm对象的每个可选属性的有效值,所以Realm不可能智能地区分提供的空值应忽略的时间间隔还是应该用于清空它指向的财产。

最简单的方法是使用您收到的JSON构建仅包含您希望更新的值的,然后通过+[RLMObject createOrUpdateInRealm:withValue:]将其传递给Realm,以显式更新该对象上的属性,你已经提供。

如果要使用该对象的RLMObject副本更新对象,则需要确保副本包含要保留的所有属性。

+0

感谢TiM,是的,这将是一个解决方案,但正如我已经告诉我使用序列化器来映射这些对象,并在某些情况下,他们得到坚持而不是其他人。因此我使用initWithVlaue:构造函数。有没有办法以智能的方式复制持久对象?或者在现有技术状态下将所有属性及其值作为字典获取? –

+0

我很高兴彼得!虽然Realm本身并没有提供复制功能,但我只是做了一些研究,发现有一个第三方库可以帮助管理Realm和JSON的工作:https://github.com/matthewcheok/Realm-JSON 从它的外观,'initWithValue:'在它现在的工作方式上有些限制,并且有一个问题可以改进:https://github.com/realm/realm-cocoa/issues/2377 – TiM