2015-04-02 57 views
5

讓我們有這樣的例子:刪除存儲領域的模式,但保留對象活着

我們用一組動物的工作。假設我們並不需要數據庫中保存的所有動物,並且有一個邏輯來控制從數據庫添加和移除動物。

例如我有一個物體,馬,字符串屬性name與「Suey」,我把她加到Realm,addObject:。 所以現在我們把這個對象保存到Realm中。這個對象是有效的,我們可以做horse.name,它會返回「Suey」。

接下來會發生什麼,我需要從數據庫中刪除Suey。我做deleteObject:。但令人遺憾的是,它不僅消除了關於馬的持續信息,而且還使我的對象無效。 Suey基本上已經死了,所以如果我想讓她回到DB中,我需要從頭開始創造另一匹馬,只有在那之後,我才能在DB中擁有另一個Suey。

有沒有另一種讓蘇伊活着的方法,所以我在管理她的狀態方面有更多的靈活性?

我希望我明確了這一點,如果您有任何問題,請讓我知道。

在此先感謝!

UPDATE

馬是從事一個一對多的關係,所以它的壽命也相關模型影響性能。

+0

有沒有一對多的關係? 是否有任何可能性,你會添加多個小時,如「蘇伊」,然後「Duey」? 如果不是那麼刪除對象,您可以將名稱的值設置爲零。 在添加對象時,您可以設置name屬性而不是addObject。 – Samir 2015-04-02 09:35:24

+0

是的,有一對多的關係。我會更新這個問題,謝謝。 – Dumoko 2015-04-02 10:51:18

回答

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要麼變成一項獨立單獨的對象(如上)或進入另一個領域。

+0

我注意到Realm對象沒有實現'NSCoding'協議,所以基本上這個想法是實現類似'-copy'方法的東西。好的,感謝分享這個想法,我會記住這是「分離」的方式。謝謝! – Dumoko 2015-04-03 07:36:50

1

根據documentation對查詢結果對象(在您的案例中名爲Suey的Object Horse)的每個修改都會直接修改磁盤上的數據,因爲結果是實際數據而不是其副本。所以如果你移除馬,你必須創建一個新馬。