采用核心数据,按几个标准过滤。我想要NSPredicate吗?

时间:2016-06-30 02:50:41

标签: ios core-data

自从我触及Core Data以来已经有一段时间了,我现在正试图将应用程序移到它上面。数据从服务器下载为JSON,并存储为几个平面文件。

当用户与应用程序交互时,我会立即将特定屏幕(数百个条目)的整个数据集加载到内存中。然后,用户可以按距离过滤记录(在我的情况下,它们是场地)。 (位置由Core Data提供。)

用户还可以过滤Venue托管对象的其他几个属性,并输入搜索词。

我希望将所有这些过滤器组合在一起,以允许用户搜索,排序和浏览数据。我已经编写了代码来在内存中使用NSArray来完成所有这些事情,但性能很差。

我想在这里使用NSPredicate吗?我知道我可以使用它来过滤NSManagedObject的属性,但是对于更多的瞬态属性,例如场地与用户的距离,我不确定这是如何工作的。

使用Core Data实现此目标的一般步骤是什么?

3 个答案:

答案 0 :(得分:1)

就距离和核心数据而言:

独立存储lat和long,查询具有用户中心的“square”中的所有内容,以及搜索半径的内半径(也就是圆圈所在的方形内部)

在内存中手动抛出结果

就整个查询而言:谓词中的一些和规则会创造奇迹

答案 1 :(得分:0)

我使用四叉树进行地理查询。它比扫描阵列快得多。我的代码源自Wikipedia entry on Quadtrees。有几篇关于在MKMapView上使用四叉树的博客文章。 NSPredicate不是特定于核心数据的过滤器。它可以应用于任何NSArray。如果您的数据集很大,几百个点,它可能会比您的循环运行得更快。

答案 2 :(得分:0)

事实证明,对于我的大多数过滤条件,我确实需要NSPredicate,但无论如何我切片,核心数据无法按位置排序。

可以使用NSFetchedResultsController按字母顺序进行过滤,也可以按“type”属性和搜索字词进行过滤。

正如互联网上其他地方所述,基于块的NSSortDescriptor将无法满足我的需求,因为核心数据需要可以编译为SQL语句的排序描述符。此外,Core Data不知道如何进行SQL位置计算。