从Realm中删除模型但保持对象存活

时间:2015-04-02 09:07:35

标签: ios realm

让我们举个例子:

我们与一组动物合作。让我们假设我们不需要在数据库中保留所有动物,并且有一个控制从数据库中添加和删除动物的逻辑。

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

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

还有另一种方法让Suey活着,所以我在管理她的状态方面有更大的灵活性吗?

我希望我明确指出,如果您有任何问题,请告诉我。

提前致谢!

更新

The Horse IS参与一对多关系,因此它的生命周期也会影响相关模型中的属性。

2 个答案:

答案 0 :(得分:1)

根据documentation查询结果对象的每次修改(在您的情况下,Object Horse with Name Suey)直接修改磁盘上的数据,因为结果是实际数据而不是它的副本。因此,如果你移除马,你必须创建一个新的。

答案 1 :(得分:1)

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

// 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复制到独立对象(如上所述)或其他领域时使用相同的方法。