我在iOS Core Data数据库中有一组实体对象,用于描述某个位置的某些内容。我们调用实体位置。我已经通过在位置上引用了两个属性来实现这一点,即位置 - 纬度和经度,两者都是双倍。还有其他元素,比如名字。核心数据中的位置通过NSFetchedResultsController按距离排序?
我正在使用NSFetchedResultsController将实体绑定到UITableViewController。我想要做的是将结果按照给定CLLocationCoordinate2D的距离排序。在一个非常理想的情况下,我可以刷新该列表以重新计算基于新位置的排序。因此,这种排序取决于两个键和第三个“静态”变量(不同于集合中的项目)。
我想我可以弄清楚如何使用NSSortDescriptors排序任意列表。但是,我不控制如何在NSFetchedResultsController中使用排序描述符。
有没有一种方法可以配置我的实体,我的NSFetchedResultsController,我的NSSortDescriptors等来完成此操作?我怀疑答案不在于创建花哨的NSSortDescriptor,而是在代表距离的实体中创建瞬态属性,并定期重新计算该属性。然而,我已经足够新的核心数据,我不知道如何做到这一点(迭代所有实体并重新计算字段)。我也不确定NSSortDescriptors是否可以处理Transient属性。
不幸的是,获取的结果控制器无法对瞬态属性或计算属性进行排序。请参阅http://stackoverflow.com/questions/13292582/nspredicate-with-function-not-working或http://stackoverflow.com/questions/12027769/nssortdescriptor-sort-by-location了解类似的问题和参考文档。 –
谢谢!我看到了这一点,这就是为什么我认为答案可能在计算我的核心数据实体中的值。让我们从表格中获取瞬态 - 如果它不是一个瞬态场,我将如何定期更新一组实体? –
你真的需要一个提取的结果控制器吗?如果您将对象提取到数组中,则可以在内存中对该数组进行排序,并将其用作表视图的数据源。 –