gpt4 book ai didi

ios - 核心数据中的位置通过 NSFetchedResultsController 按距离排序?

转载 作者:可可西里 更新时间:2023-11-01 03:06:59 26 4
gpt4 key购买 nike

我的 iOS 核心数据数据库中有一组实体对象,用于描述某个位置的某些内容。我们称该实体为 Location。我通过 Location 上的两个属性来实现这一点,这些属性指的是位置——纬度和经度,都是 double 值。还有其他元素,例如名称。

我正在使用 NSFetchedResultsController 将实体绑定(bind)到 UITableViewController。我想要做的是根据到给定 CLLocationCoordinate2D 的距离对结果进行排序。在真正理想的情况下,我能够刷新该列表以根据新位置重新计算排序。因此,这种排序将取决于两个键和第三个“静态”变量(一个在集合中的项目之间不发生变化的变量)。

如果我使用 NSSortDescriptors 对任意列表进行排序,我想我可以想出如何做到这一点。但是,我不控制在 NSFetchedResultsController 中如何使用排序描述符。

有没有一种方法可以配置我的实体、我的 NSFetchedResultsController、我的 NSSortDescriptors 等来完成这个?我怀疑答案不在于创建一个花哨的 NSSortDescriptor,而是在于在表示到我的距离的实体中创建一个 transient 属性,并定期重新计算该属性。但是,我对核心数据还很陌生,所以我不确定如何最好地做到这一点(遍历所有实体并重新计算一个字段)。我也不确定 NSSortDescriptors 是否适用于 Transient 属性。

最佳答案

(来自评论:)

(基于 SQLite 的)核心数据存储的获取请求不能使用基于 transient 属性或基于 Objective-C 的谓词的排序描述符。

如果你不想失去抓取结果 Controller 的优势(比如动画 TableView 更新、自动分组等),你必须预先计算到当前位置的距离并将其存储在( persistent) 对象的属性。

或者,您可以获取所有对象并在内存中对它们进行排序。在这种情况下,您可以使用任意排序描述符。但这不能与获取的结果 Controller 结合使用,因此您必须注册托管对象上下文中的更改,并在必要时重新加载表。

关于ios - 核心数据中的位置通过 NSFetchedResultsController 按距离排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com