【问题标题】:NSPredicate for finding only the first matchNSPredicate 仅查找第一个匹配项
【发布时间】:2014-03-26 09:55:31
【问题描述】:

在 Core Data 中,我有一个名为 UUID 的字段,它是一个唯一 ID。

现在,我想获取一个特定的 UUID 记录。为此,我需要使用NSPredicate。但据我所知,谓词会搜索整个数据存储。例如,假设有 10 条记录,我想搜索值为 2UUID。谓词将在找到 2 后继续搜索(占用额外的 CPU 周期)。

我想知道我们是否可以对此进行优化。如何让谓词在找到第一个对象后停止搜索。

【问题讨论】:

  • 您可以将setFetchLimit 设置为1(您需要的限制)以获取请求..
  • 谢谢拉贾。假设我想对 NSArray 做同样的事情。
  • 参考参考文档中的聚合操作 - array[FIRST] - Specifies the first element in the array array. 链接 - developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…
  • Raja That First 用于多任务阵列

标签: ios objective-c core-data nsarray nspredicate


【解决方案1】:

在 Core Data 中,在 fetch 请求上使用 setFetchLimit: 来限制结果的数量。如果您要经常使用 UUID 属性,也可以为其添加索引。

如果您想在数组上运行谓词并限制命中,您需要自己迭代数组 (enumerateObjectsWithOptions:usingBlock:) 并将谓词显式应用于每个项目 (evaluateWithObject:)。然后,当找到匹配项时,使用块的BOOL *stop 参数结束迭代。

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 2013-12-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2013-11-18
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多