数组预测搜索过滤:基于name字段的NSPredicate查询修正
问题解决:基于数组对象的
name字段实现预测搜索 你现在的问题出在错误处理了数组元素的取值逻辑——之前的代码只针对数组里的单个元素提取所有属性值来过滤,既没有遍历整个数据数组,也没有明确指定要匹配name字段,自然得不到正确的搜索结果。
要实现基于name字段的预测搜索,你不需要去提取单个字典的allValues,直接对存储完整数据的fmdbArrayAdjust数组应用谓词,指定匹配name字段即可。
修改后的代码
// 创建针对name字段的搜索谓词,[cd]表示忽略大小写和重音 NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", text]; // 直接对整个数据数组应用过滤,得到匹配的结果数组 filteredFmdbArray = [fmdbArrayAdjust filteredArrayUsingPredicate:searchPredicate];
为什么这样改?
- 原代码
[fmdbArrayAdjust[i] allValues]仅处理数组里的第i个元素,而我们需要遍历整个数组的所有对象完成过滤 - 谓词中的
name contains[cd] %@明确指定只检查每个字典对象的name属性,完全符合你基于name字段搜索的需求 contains[cd]里的c(忽略大小写)和d(忽略重音)让搜索更友好,用户输入任意大小写或带重音的字符都能匹配到目标结果
如果之前的代码里有循环遍历fmdbArrayAdjust的逻辑,现在可以直接去掉——filteredArrayUsingPredicate:会自动帮你遍历整个数组并完成过滤。
内容的提问来源于stack exchange,提问作者Shivam Tripathi
相关产品推荐
相关产品推荐

