为什么我的SearchController只匹配第一个字符?

时间:2015-08-22 21:23:47

标签: ios swift uitableview nspredicate uisearchcontroller

我有这样的字典格式数据:

Box

我的TableViewController列出了所有“标题”数据。

我正在为用户实现SearchController,以便仅从“标题”中搜索特定数据。

我的代码似乎只显示与搜索查询中的第一个字符匹配的结果。

例如:如果用户输入“A”,则显示带有“A”的所有标题结果,但如果用户继续使用“A”(带空格),则searchResult中的所有内容都将消失。

这是我的尝试:

var data: [[String:AnyObject]] =

[
  [
    "id": "1",
    "title": "A Title",
    "Detail": "This is a String"
  ],      
  [
    "id": "2",
    "title": "A Title Again",
    "Detail": "This is a String"
  ]
]

1 个答案:

答案 0 :(得分:2)

你的谓词错了。现在设置它的方式,谓词中的self指的是数组中的字典中的对象,字典没有子字符串:)为了使其工作,我们必须告诉谓词检查特定键下的值。这可以通过两种方式完成:

let searchPredicate = NSPredicate(format: "title CONTAINS[c] %@", searchController.searchBar.text!)
// OR
let searchPredicate = NSPredicate(format: "SELF[\"title\"] CONTAINS[c] %@", searchController.searchBar.text!)

这样,谓词将检查title键下的值,如果它包含搜索栏中的文本。

我不知道为什么它只用单个字母。