【发布时间】:2009-08-04 21:19:04
【问题描述】:
我正在阅读有关核心数据的文档以加快搜索速度。我发现了以下内容,并对它的含义感到有些困惑:
另一方面,SQL 存储, 编译谓词并排序 描述符到 SQL 并评估 导致数据库本身。这是 主要是为了 性能——数据库更快 在这(这就是他们设计的 for)——但这意味着评估 发生在非 Cocoa 环境中, 所以排序描述符(或 依赖于 Cocoa 的谓词)不能 工作。支持的排序选择器是 比较:和不区分大小写比较:。 请注意,此外您无法排序 在瞬态属性上使用 SQLite 存储。
这是否意味着他们建议在从 sqlite 存储中获取托管对象时不要使用谓词或排序描述符?
我目前有一个 FetchRequest,我在其中传递了以下内容:
NSPredicate *thingSearchPredicate =
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText];
NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES];
搜索有效,但我认为我使用的谓词依赖于可可。 BEGINSWITH 是我假设一个 compare:options:range: 简写,其中 range 是搜索字符串的长度。变音符号不敏感的事实显然似乎反驳了上面的建议,这是否意味着在获取该实体的所有实例后自动为我评估它们?
还有其他加快搜索速度的方法吗?
【问题讨论】:
-
不,他们不意味着您不能使用 NSSQLiteStore 的谓词或排序描述符......只是 某些 谓词和可能适用于其他存储的排序描述符不适用于 SQLLite 存储。基本上,他们必须能够将它们编译成 SQL 语句。 BEGINSWITH[cd] 可以很容易地用 SQL 表示。
标签: objective-c cocoa sqlite core-data