使用 NSFetchedresultController 对“瞬态”字段进行排序

Posted

技术标签:

【中文标题】使用 NSFetchedresultController 对“瞬态”字段进行排序【英文标题】:Sorting on 'transient' fields with NSFetchedresultController 【发布时间】:2012-11-10 20:34:19 【问题描述】:

有没有办法使用“瞬态”字段或类似的东西,并以某种方式使用 NSFetchedResultsController 进行相应的排序。我想做以下事情:

我在数据库中有地点的位置。当一个人打开列表时,我想在顶部显示最近的地方,然后根据距离进行排序。但很明显,这取决于用户的位置,所以我不能使用静态字段。我希望使用瞬态字段,您可以将其用于节标题。

有没有人可以为这种情况提供解决方案或解决方法?

【问题讨论】:

【参考方案1】:

您不能在 SQlite 基础核心数据存储的获取请求中使用瞬态属性。

参见“核心数据编程指南”中的Fetching Managed Objects:

您无法使用基于瞬态属性的谓词进行获取 (尽管您可以使用瞬态属性在内存中进行过滤 你自己)。 ...总而言之,如果您直接执行 fetch,您应该 通常不会将基于 Objective-C 的谓词或排序描述符添加到 获取请求。相反,您应该将这些应用于 获取。

您可以为sectionNameKeyPath 使用瞬态属性,但即便如此,您仍需要基于持久属性的部分的第一个排序描述符。

所以唯一的解决方法可能是获取所有对象,然后对获取的数组进行排序。但是当然你不再具有获取结果控制器的优势了。

【讨论】:

谢谢马丁。我在想也许我可以对这些部分做点什么。可以离线手动排序或者在用户当前坐标附近进行粗略搜索,计算并保存距离并再次获取,但这一切都很麻烦。感谢您的回复,这是一个腻子,但可以理解,在这种情况下是不可能的。 我选择了选择区域内的位置(按纬度/经度),填充距离字段,然后进行相应排序的选项。有点,恼人的开销,但它的工作原理。 这与我询问后所做的相同,请参阅:***.com/questions/3934418/… 我对计算和存储的优化,但不保存上下文,可能有助于加快速度。

以上是关于使用 NSFetchedresultController 对“瞬态”字段进行排序的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份