2012-02-15 67 views
2

我需要發送一個對象(NSManagedObject(NSMO)子類)到Web服務並稍後檢索它。我希望能以某種方式將它串行化,但我希望不必跳過編碼環。我可以連載NSManagedObject嗎?

我可以簡單的NSMO對象轉換爲使用字典: [instance dictionaryWithValuesForKeys:instance.entity.attributesByName.allKeys];

但是,我NSMO深到其他NSMOs關係方面多個層次。創建該對象的完整序列化版本的最佳方法是什麼?

回答

4

如果你想這樣做,在一般的方式,你可以寫一個遞歸方法serializedDictionary(無論是在NSManagedObject或類別中的一個子類),其中:

  1. 創建一個空的NSMutableDictionary。
  2. 對於每個屬性,將鍵和值添加到字典中。
  3. 對於每個關係,將關係名稱添加爲關鍵字,然後在對象上調用serializedDictionary並將其添加爲值。如果它是一對多的關係,你必須把這些值放在一個NSArray中。

需要注意的是,如果它是在所有可能的子對象是相關備份到父(如果你有反向關係,像核心數據建議這是很可能的),你要麼需要加入白名單,你保存的關係(更簡單)或傳遞一組來跟蹤哪些對象已經被序列化,所以你不再編碼它們(更難,我不建議這樣做)。

+0

非常感謝。我喜歡做一個獲取字典的遞歸方法。我認爲當服務返回數據時我會做什麼,但是,並不是將它反序列化回NSMO,而是將它保留在字典形式中,因爲應用程序只需要顯示歷史數據並且不再需要保留跟蹤。這樣我就不用擔心反向關係。另外,我想我只是將字典中的to-manys作爲集合添加,並將其作爲關係名稱。 – 2012-02-15 17:20:45

+0

從字典中創建託管對象時,核心數據會自動爲您設置反向關係,因此返回不應該那麼困難。如果你用一種形式處理數據,它也會使你的顯示代碼更簡單。 – benzado 2012-02-15 17:55:03

相關問題