我正在阅读有关加速我的搜索的核心数据的文档。我发现下面并略有困惑,这是什么意思:存储与核心数据的特定交互
的SQL存储,而另一方面, 编译谓词和排序 描述符SQL和评估 结果在数据库本身。这是 主要做了 性能数据库是在这个快得多 (这就是它们被设计为 ) - 但它意味着,评价 发生在非可可环境, 等排序描述符(或 谓词)那依靠可可不能 工作。支持的排序选择器是 比较:和caseInsensitiveCompare :. 请注意,此外,您无法使用 SQLite存储对瞬态属性对 进行排序。
,这是否意味着他们建议从sqlite的商店获取管理对象时,人们不使用谓词或排序描述符?
我现在有一个FetchRequest,我通过如下:
NSPredicate *thingSearchPredicate =
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText];
NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES];
搜索工作,但我想我使用依赖于可可的谓词。 BEGINSWITH是我假设一个比较:选项:范围:速记范围是搜索字符串长度。事实上,区分符号不敏感肯定似乎与上述建议相反,所以这只意味着在获取该实体的所有实例后自动评估它们。
有没有其他方法可以加快搜索速度?
不,它们*不表示您不能使用谓词或对NSSQLiteStore进行排序描述符......只是对某些可能适用于其他存储的谓词和排序描述符不适用于SQLLite商店。 基本上,他们必须能够将它们编译成SQL语句。 BEGINSWITH [cd]可以很容易地用SQL表示。 – Hunter 2009-08-04 23:05:17