如何保留核心数据中的有序列表

我正在写一个API方法,返回一个Web服务的对象列表。 该服务还会caching结果,并尝试在再次访问Web服务之前返回caching的结果(如果有)。 所以我将这个列表存储在一个Core Data实体中。 但核心数据只允许将可能的关系存储在NSSet中,而不保存顺序。 但是我希望caching结果保留原来的订单(最初来自Web服务)。 我不一定知道这个命令是如何build立的(所以我不能sorting)。

那我该如何保存这个命令? 我的计划是存储一个string的对象ID,我可以稍后使用它们来订购:

NSString *objectIds = @"1 5 2 9 4"; 

这是做这件事的最好方法吗?

如果您可以定位iOS 5,那么您可以使用新的NSOrderedSetfunction进行任意sorting的核心数据关系。 有关此新function的更多信息,请参阅适用于iOS 5的核心数据发行说明 。

如果您必须支持iOS 4,那么您将需要自己处理订购。 一个常见的做法是将一个整型属性添加到您的模型中,然后您需要pipe理自己。 您可以在获取数据时对此属性进行sorting。

将订单存储在完全不同的string中似乎是错误的做法。 如果sorting是重要的,这个信息应该在模型中,用户应该能够直接查询(“给我这个特定列表的前五个对象”,或者“什么是对象foo的索引”)。 必须得到一串对象ID,parsing它,然后查询某个对象ID,这对我来说是非常错误的。

这是一个主观的问题。 您也可以按照您希望的顺序将它们设置为链接列表。

在您要存储对象的CoreData模型中包含您自己的NSNumber标识字段。 id将代表你想要保留的顺序; 你必须自己设置它,显然。 然后,当你从CoreData获取对象时,你可以按照该ID进行sorting。 您可能需要/必须保留某个地方的最高身份证号码值分配,以保持顺序正确与随后的Web服务调用和应用程序启动。