存储与Core Data的特定交互

时间:2009-08-04 21:19:04

标签: objective-c cocoa sqlite core-data

我正在阅读关于核心数据的文档,希望加快我的搜索速度。我找到了以下内容,并对其含义略有不确定:

  

另一方面,SQL商店,   编译谓词和排序   SQL的描述符并评估   导致数据库本身。这是   主要是为了   性能数据库要快得多   在这(这是他们的设计   因为 - 但它意味着评估   发生在非Cocoa环境中,   等排序描述符(或   谓词)依赖Cocoa不能   工作。支持的排序选择器是   比较:和caseInsensitiveCompare:   请注意,此外您无法排序   关于瞬态属性的使用   SQLite商店。

the documentation is here

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

我目前有一个FetchRequest,我传递了以下内容:

    NSPredicate *thingSearchPredicate = 
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText];
    NSSortDescriptor *sortDescriptor = 
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES];

搜索有效,但我认为我使用的是依赖可可的谓词。 BEGINSWITH是我假设比较:选项:范围:缩写,其中范围是搜索字符串长度。事实上是变音符号不敏感似乎肯定会反驳上面的建议,所以这只是意味着在获取该实体的所有实例后它们会自动为我评估?

还有其他方法可以加快搜索速度吗?

1 个答案:

答案 0 :(得分:0)

如果核心数据无法在SQL中表达您的查询,您将看到错误。该文档指定表达式被采用并转换为SQL并出于性能原因传递给sqllite。如果它不能用SQL表示,它不会退化为Cocoa。

它们意味着什么谓词在SQL中无法表达,因此根本不起作用。

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