Objective c 存储与核心数据的特定交互

Objective c 存储与核心数据的特定交互,objective-c,cocoa,sqlite,core-data,Objective C,Cocoa,Sqlite,Core Data,我正在阅读关于核心数据的文档,希望加快我的搜索速度。我发现了以下内容,对其含义有点困惑: 另一方面,SQL存储, 编译谓词并进行排序 将描述符转换为SQL并计算 结果是数据库本身。这是 主要是为了 性能数据库要快得多 在这(这是他们的设计 但这意味着评估 发生在非可可环境中, 因此,排序描述符(或 依赖Cocoa的谓词不能 工作支持的排序选择器包括 比较:和不区分大小写比较:。 请注意,此外,您不能排序 关于瞬态特性的应用 SQLite商店 这是否意味着他们建议在从sqlite存储获取托管对象

我正在阅读关于核心数据的文档,希望加快我的搜索速度。我发现了以下内容,对其含义有点困惑:

另一方面,SQL存储, 编译谓词并进行排序 将描述符转换为SQL并计算 结果是数据库本身。这是 主要是为了 性能数据库要快得多 在这(这是他们的设计 但这意味着评估 发生在非可可环境中, 因此,排序描述符(或 依赖Cocoa的谓词不能 工作支持的排序选择器包括 比较:和不区分大小写比较:。 请注意,此外,您不能排序 关于瞬态特性的应用 SQLite商店

这是否意味着他们建议在从sqlite存储获取托管对象时不要使用谓词或排序描述符

我当前有一个FetchRequest,其中我传递了以下内容:

    NSPredicate *thingSearchPredicate = 
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText];
    NSSortDescriptor *sortDescriptor = 
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES];
搜索工作正常,但我认为我使用的谓词依赖于cocoa。BEGINSWITH是我假设一个比较:选项:范围:速记,其中范围是搜索字符串长度。事实上,is是不区分重音的,这显然违背了上面的建议,那么这是否意味着在获取该实体的所有实例后,它们会自动为我进行评估


有没有其他加快搜索速度的方法?

如果核心数据不能用SQL表示查询,您将看到一个错误。文档指定,出于性能原因,将表达式转换为SQL并传递给sqllite。并不是说,如果不能用SQL表示,它将退化为Cocoa

它们的意思是肯定有一些谓词不能在SQL中表达,所以根本不起作用

此外,您需要使用它们的排序选择器,而您不能自己创建,因为它们不知道如何将Cocoa中的任意对象转换为SQL。

不,它们并不意味着您不能使用带有NSSQLiteStore的谓词或排序描述符。。。只是某些可能适用于另一个存储的谓词和排序描述符不适用于SQLLite存储。基本上,它们必须能够将它们编译成SQL语句。BEGINSWITH[cd]可以很容易地用SQL表示。