首页 文章

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

提问于
浏览
5

我们有这个例子:

我们与一组动物一起工作 . 让我们假设我们不需要在数据库中持久存在所有动物,并且存在控制从数据库添加和移除动物的逻辑 .

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

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

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

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

提前致谢!

UPDATE

Horse IS参与一对多的关系,因此它的寿命也会影响相关模型中的属性 .

2 回答

  • 1

    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 复制到独立对象(如上所述)或另一个域中,都可以使用相同的方法 .

  • 1

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

相关问题