我正在编写一个从web服务返回对象列表的API方法。此服务还缓存结果,并在再次访问web服务之前尝试返回缓存的结果(如果有)。所以我将这个列表存储在一个核心数据实体中。但是核心数据只允许在NSSet中存储多对多关系,这不能保持顺序。但我希望缓存的结果保留原始顺序(最初来自web服务)。我不一定知道这个顺序是如何建立的(所以我不能排序)。
那么我如何才能保持这个顺序呢?我的计划是存储一个包含对象I的字符串,稍后我可以使用它来对它们进行排序:
NSString *objectIds = @"1 5 2 9 4";
这是最好的方法吗?
发布于 2012-01-05 22:04:11
如果您可以以iOS 5为目标,那么您就可以将新的NSOrderedSet特性用于任意排序的核心数据关系。有关此新功能的详细信息,请参阅Core Data Release Notes for iOS 5。
如果你必须支持iOS 4,那么你需要自己处理排序。一种常见的方法是向您的模型添加一个整数属性,然后您需要自己管理该属性。然后,您可以在获取数据时对此属性进行排序。
将订单存储在完全不同的字符串中似乎是错误的做法。如果排序很重要,这个信息应该在模型中,并且用户应该能够直接查询它(“给我这个特定列表的前五个对象”,或者“对象foo的索引是什么”)。必须获取一个对象it字符串,对其进行解析,然后查询特定的对象it,这对我来说是非常错误的。
发布于 2012-01-05 22:01:58
在存储对象的CoreData模型中包含您自己的NSNumber id字段。id将表示您想要保留的顺序;显然,您必须自己设置它。然后,当您从CoreData获取对象时,您可以按该id进行排序。您可能希望/必须在某个地方保留您分配的最高id值,以便在后续的web服务调用和应用程序启动时保持正确的排序。
发布于 2012-01-05 21:56:51
这是一个主观的问题。您还可以按照您想要的顺序将它们设置为链接列表。
https://stackoverflow.com/questions/8750326
复制