【问题标题】:Ordered Sets and Core Data (NSOrderedSet)有序集和核心数据 (NSOrderedSet)
【发布时间】:2013-04-19 12:50:25
【问题描述】:

我有一个包含属性dateTimevalue 的股价列表。

目前我在使用排序描述符获取股价时对股价进行排序。

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

我正在逐一插入股价

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

如何在使用dateTime 上的排序描述符插入股价后立即对其进行排序?

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

谢谢!

【问题讨论】:

    标签: objective-c ios5 core-data nsset


    【解决方案1】:

    我不确定使用 NSMutableOrderedSet 会如何影响底层的 sqlite 数据库。很高兴认为它会按集合的顺序存储它,但底层实现是一个黑盒,我认为如果它完全可以工作的话,我不认为它会始终如一地工作。

    如果您正在寻找性能提升,我认为向该属性添加索引将是最好的方法。

    【讨论】:

    • 话虽如此,mysql确实支持聚集索引(这会影响磁盘上的排序)。我不确定它是否在 CoreData 中公开,但您可以研究一下。
    • 我已为属性编制索引,并对每次提取进行排序。但是,我需要提高性能并希望按排序顺序存储项目。
    • 这里的 MySQL 和这里有什么关系?
    • @TomHarrington 很确定他们的意思是 SQLite,或者他们喝了太多 Ale。
    • 哇,汤姆...不是很明显我的意思是 sqlite 吗?如果你因此给我投了反对票,那就太丢脸了。
    【解决方案2】:

    在您的 CoreData 模型中标记您的属性的 Ordered 复选框。

    还要确保在您的 AppDelegate 中设置 CoreData 自动迁移(创建 PersistentStore 时的选项字典)。这样,CoreData 将能够在不丢失数据的情况下进行此更改。

    【讨论】:

    • 如何重新排序数据库中现有的有序集?
    • 我认为你不能自动完成。您可以根据订单或日期等标准创建一个订单功能。如果您将 CoreData 模型中的 NSSet 更改为 NSArray,我假设您之前没有订单,因此它将从旧的 NSSet 获取“allObjects”并将其添加到您的数组中。跨度>
    • 如何指定排序的依据?在 OP 的情况下,基于 dateTime?
    【解决方案3】:

    我想添加到已接受的答案,如果您有 NSSet,则必须在选中已排序的复选框后将其更改为 NSOrderedSet

    【讨论】:

    • 谢谢,这是关于更改为 NSOrderedSet 的详细信息,这是我来这里寻找的。​​span>
    猜你喜欢
    • 2012-04-10
    • 2016-01-25
    • 2014-03-20
    • 2012-08-31
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多