从 Realm 中删除模型,但让对象保持活动状态

Delete the model from the Realm but keep the object alive

让我们举个例子:

我们与一组动物一起工作。假设我们不需要将所有动物都保存在数据库中,并且有一个逻辑可以控制在数据库中添加和删除动物。

例如,我有一个对象,一匹马,带有字符串 属性 name 和 "Suey",我将她添加到 Realm,带有 addObject:。 所以现在我们将这个对象保存到 Realm 中。这个对象是有效的,我们可以做 horse.name,这将 return "Suey".

接下来我需要从数据库中删除 Suey。我做 deleteObject:。但遗憾的是,它不仅删除了关于马的持久信息,而且还使我的对象无效。 Suey 基本上已经死了,所以如果我想让她回到数据库中,我需要从头开始创建另一匹马,只有在那之后我才能在数据库中拥有另一匹 Suey。

有没有其他方法可以让 Suey 活着,这样我就可以更灵活地管理她的状态?

我希望我说清楚了,如果您有任何问题,请告诉我。

提前致谢!

更新

马是一对多关系,所以它的寿命也会影响相关模型的属性。

根据 documentation 查询结果对象(在您的例子中是名为 Suey 的对象 Horse)的每次修改都会直接修改磁盘上的数据,因为结果是实际数据而不是它的副本。因此,如果您删除了这匹马,则必须创建一匹新马。

Realm 中的对象是数据库中等效对象的访问器。如果出于某种原因,您需要 "detach" 磁盘上表示的对象变量,您可以将其复制到内存中。一种简单的方法是使用持久对象的内容创建一个新的非持久对象:

// Assuming `Horse` inherits from `RLMObject` and `persistedHorse` is attached to an `RLMRealm`.
Horse *persistedHorse = ...;
Horse *inMemoryHorseCopy = [[Horse alloc] initWithObject:persistedHorse];
// This will create a new `Horse` object, not tied to an RLMRealm,
// by copying the contents of `persistedHorse`.

只要您需要将现有 RLMObject 复制到独立对象(如上)或另一个领域,您就可以使用相同的方法。