6

我有一个应用程序,其中包含核心数据中的一些位置,我想按照与用户位置的接近顺序向用户显示它们。我正在使用 NSFetchedResultsController 将位置提供给表视图。我考虑过创建一个虚拟访问器方法,该方法返回位置与用户的距离,该方法将使用“全局”CoreLocationManager 计算,但它崩溃的原因是:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'keypath distanceFromCurrentLocation not found in entity < NSSQLEntity Location id=4>'

我还为用户提供了按字母顺序排序的选项,因此如果可能的话,如果我保留 NSFetchedResultsController,我会更喜欢它。

我该怎么做?

谢谢!

4

3 回答 3

3

NSFetchedResultsController 的问题(或缺少的功能)是缺少将瞬态属性用于排序顺序和节键路径的能力。

我也为此苦苦挣扎,因此您可能对此感兴趣:

NSFetchedResultsController 部分本地化排序

如果您可以保证有限的记录集,我相信您也可以使用这种方法。但我真的很想看到一个更复杂的解决方案。

于 2010-05-05T06:08:28.867 回答
1

除非您在实体中定义了瞬态属性,否则虚拟访问器将无法在 Core Data 中工作。NSFetchedResultsController(和所有其他核心数据操作)在尝试执行任何操作之前查看实体图。如果虚拟属性没有出现在实体定义中,那么 NSFetchedResultsController 将报告不存在这样的属性。

您想在实体中定义一个带有名称的瞬态属性,distanceFromCurrentLocation您应该能够编写一个虚拟访问器并让 NSFetchedResultsController 看到它。

于 2010-04-19T17:02:41.690 回答
1

我尝试做同样的事情,按与某个位置的距离对结果进行排序。这是我的一个问题:

核心数据和核心位置

事实证明,您必须将所有位置加载到内存中才能比较它们。我最终使用了 SQLite,它更难实现,但让我对这种功能的头痛要少得多。

这可能不是您想要的答案,但如果您有大量数据集,我会推荐 SQLite。对我来说,它最终变得更快、更容易处理。

于 2010-04-19T17:12:22.713 回答