2013-04-25 91 views
9

我有一个股价清单,其中有属性dateTimevalue有序集合和核心数据(NSOrderedSet)

目前,我在使用排序描述符获取股票价格时排序股票价格。

现在,我想更改我的代码并将它们存储在已排序的顺序中以更快地检索最新的股价(dateTime = max)。

我使用

SharePrice *priceItem= [NSEntityDescription insertNewObjectForEntityForName:@"SharePrice" inManagedObjectContext:context];

如何使用我在dateTime一种描述符将它们插入之后股价排序插入股价逐一?

或者我需要将它转换为NSMutableOrderedSet并使用sortUsingComparator:

谢谢!

回答

21

Ordered property on CoreData

标记您的财产在你的CoreData模型中的有序复选框。

另外一定要在您的AppDelegate(创建PersistentStore时的选项字典)中设置CoreData自动迁移。这样CoreData就可以在不丢失数据的情况下进行更改。

+1

如何重新排序数据库中的现有有序集? – AlexR 2013-04-27 11:09:57

+0

我认为你不能自动做到这一点。您可以根据某些标准(如订单或日期)订购功能。如果你在核心数据模型中把'NSSet'改成'NSArray',我假设你之前没有订单,所以它会从旧的'NSSet'中获得“allObjects”,并将它添加到你的数组中。 – 2013-04-27 19:21:16

0

我不知道如何使用NSMutableOrderedSet会影响底层的sqlite数据库。很高兴认为它将按照集合的顺序进行存储,但底层实现是一个黑盒子,我不认为如果它能够一直工作,它将始终如一地工作。

如果这是你正在寻找的性能增益,我会认为给该属性添加一个索引将是最好的方法。

+0

随着中说,MySQL的支持群集索引(影响排序后磁盘)。我不确定它是否在CoreData中公开,但这是你可以研究的。 – 2013-04-25 14:58:44

+0

我有索引的属性,并与每个获取进行排序。但是,我需要提高性能,并希望按排序顺序存储这些项目。 – AlexR 2013-04-25 15:03:23

+8

MySQL与这里的任何东西有什么关系? – 2013-04-25 18:11:06

3

我想添加到接受的答案,如果你有一个NSSet,必须改为NSOrderedSet选择有序复选框

+0

谢谢,这是关于更改为NSOrderedSet的细节,是我来这里找到的。 – 2016-06-22 19:19:43