Realm createOrUpdate复杂对象

时间:2017-01-20 12:00:52

标签: objective-c realm

假设我有一个具有以下结构的数据库:

libssh.dll.a

我想更新已在Realm中使用所有嵌套属性管理的现有User对象:

@interface User: RLMObject
  RLMArray<Match>* matches;
@end

@interface Match: RLMObject
  RLMArray<Round>* rounds;
  RLMArray<User>* players;
@end

@interface Round: RLMObject
  User* nextMoveUser;
@end

问题是: Realm会更新所有嵌套对象以及主要对象用户吗? P.S。:我问这个,因为我在更新[Round nextMoveUser]时遇到了一些麻烦。更新后变为零。虽然调试器显示所有东西都可以解析实体。

如果有人可以解释,当涉及到这类参考时,内心的工作方式也会让我感到高兴。

1 个答案:

答案 0 :(得分:1)

使用非托管自身副本更新RLMObject时需要小心。由于nil是有效值,如果副本不包含与原始信息相同的所有信息,则这些原始值将被删除。

这也适用于RLMArray个对象,因为空数组也算作有效值;你需要确保你的数组和内容也是有效的。

使这更容易处理的一种简单方法是使用NSDictionary而不是非托管副本来更新Realm对象。这样,您就可以明确地指示哪些属性已更新,哪些属性保持不变。

我不确定如何回答关于内部如何运作的问题。但足以说明,子对象不是由父对象直接拥有的。此外,两个对象彼此独立存在和操作,但父对象保持指向子对象的链表关系。即使删除了该关系,该对象仍将保留在数据库中。