1

我想将一些对象存储到包含集合以及其他标量变量的核心数据中。

例如,我可能想要保留几千个“机器”对象:

@interface Machine : NSObject <NSCopying>
{
    NSString *idNumber;
    BOOL existsInLibrary;
    NSSet *sections; // Contains a set of NSStrings
    NSSet *banks; // " "
    NSSet *positions; // " "
    NSMutableArray *orientationIDs; // Contains an array of NSNumbers
    NSMutableSet *credits; // Contains a set of NSNumbers
}

有许多类似的 SO 问题,但似乎没有关于如何实现这一点的明确共识。我想将集合序列化为二进制数据属性吗?还是我应该使用“可转换”类型?还是我想建立几个一对多的关系

从我读到的内容来看,这些解决方案中的后者对我最有吸引力,尽管我不确定它是否在我的情况下最有意义,其中集合仅包含 NSNumbers/NSStrings 而不是其他自定义对象(几乎所有使用这种方法的解决方案似乎都被认为是理所当然的)。

如果您能通过解释上述每种策略何时最有效以及您认为我应该应用于我自己的场景来启发我,我将不胜感激!

此外,答案是否应该是“使用一对多关系”——这是否意味着我需要为每个集合类型变量创建一个不同的实体?如果我将其应用于我需要持久化的所有对象,最终这将导致数十个具有一对多关系的实体;这是可以预料的,还是我想错了?

谢谢!!

4

1 回答 1

0

序列化为二进制数据属性和使用可转换属性实际上是一回事,实现方式略有不同。两者都涉及将您的收藏转换为/从NSData.

您应该使用哪种方法取决于您希望如何使用数据。序列化集合会更简单,但它有一个限制,即您不能通过序列化值搜索对象。如果您需要通过数组值查找对象(例如,查找在其集合中或在其集合Machine中具有特定值的实例),序列化为二进制不是一个好方法。另一方面,如果这种情况永远不会发生,它只是通过更简单的编写和维护而获胜。sectionsbanks

如果您对这些属性中的任何一个使用一对多关系,则需要为这些值创建一个新的实体类型。这可能是每个属性的不同实体类型。或者,如果它们都包含相同类型的数据,您可以使用单个通用实体类型,称为MachineRelatedItem. 您将拥有与该实体类型的多对多关系。

于 2013-08-12T17:15:34.240 回答