我有一个应用程序,其中包含核心数据中的一些位置,我想以接近用户位置的顺序向用户显示它们。我正在使用NSFetchedResultsController来为表视图提供位置。我想过创建一个虚拟访问器方法来返回位置与用户的距离,该方法将使用“全局”CoreLocationManager计算,但它会因原因而崩溃:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'keypath distanceFromCurrentLocation未在实体中找到< NSSQLEntity位置ID = 4>'
我还为用户提供了按字母顺序排序的选项,所以如果可能的话,如果我保留了NSFetchedResultsController,我会更喜欢它。
我该怎么做?
谢谢!
答案 0 :(得分:3)
NSFetchedResultsController的问题(或缺少的功能)缺少对排序顺序和部分键路径使用瞬态属性的功能。
我也很挣扎,所以你可能会对此感兴趣:
NSFetchedResultsController sections localized sorted
如果你能保证一组有限的记录,我相信你也可以使用这种方法。但我真的很想看到更复杂的解决方案。
答案 1 :(得分:1)
虚拟访问器在Core Data中不起作用,除非您在实体中定义了transient属性。 NSFetchedResultsController(和所有其他Core Data操作)在尝试执行任何操作之前查看实体图。如果虚拟属性未显示在实体定义中,则NSFetchedResultsController将报告不存在此类属性。
您希望在名为distanceFromCurrentLocation
的实体中定义瞬态属性,并且您应该能够编写虚拟访问器并让NSFetchedResultsController查看它。
答案 2 :(得分:1)
我尝试做同样的事情,按距离某个位置的距离对结果进行排序。这是我的一个问题:
事实证明,您必须将所有位置加载到内存中以进行比较。我最终使用了SQLite,这更难以实现,但这使我对这种功能的麻烦更少。
这可能不是你想要的答案,但是如果你有一个大数据集,我会推荐SQLite。它最终会更快,更容易为我处理。