2012-02-15 65 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

相关问题