You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组预测搜索过滤:基于name字段的NSPredicate查询修正

问题解决:基于数组对象的name字段实现预测搜索

你现在的问题出在错误处理了数组元素的取值逻辑——之前的代码只针对数组里的单个元素提取所有属性值来过滤,既没有遍历整个数据数组,也没有明确指定要匹配name字段,自然得不到正确的搜索结果。

要实现基于name字段的预测搜索,你不需要去提取单个字典的allValues,直接对存储完整数据的fmdbArrayAdjust数组应用谓词,指定匹配name字段即可。

修改后的代码

// 创建针对name字段的搜索谓词,[cd]表示忽略大小写和重音
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", text];
// 直接对整个数据数组应用过滤,得到匹配的结果数组
filteredFmdbArray = [fmdbArrayAdjust filteredArrayUsingPredicate:searchPredicate];

为什么这样改?

  1. 原代码[fmdbArrayAdjust[i] allValues]仅处理数组里的第i个元素,而我们需要遍历整个数组的所有对象完成过滤
  2. 谓词中的name contains[cd] %@明确指定只检查每个字典对象的name属性,完全符合你基于name字段搜索的需求
  3. contains[cd]里的c(忽略大小写)和d(忽略重音)让搜索更友好,用户输入任意大小写或带重音的字符都能匹配到目标结果

如果之前的代码里有循环遍历fmdbArrayAdjust的逻辑,现在可以直接去掉——filteredArrayUsingPredicate:会自动帮你遍历整个数组并完成过滤。

内容的提问来源于stack exchange,提问作者Shivam Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:27:04