情况
我有一个应用程序,它从我构建的API中检索数据。检索数据后,它将数据填入UITableView。
在我的HTTP请求中,我有以下代码将检索到的数据保存到数组中:
var dta = []
if let parseJSON = self.son {
self.dta = parseJSON
}
之后我创建了一个类似的搜索功能:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
// if let id = dta["caseStudyTitle"] as? String
filtered = dta.filter({ (text) -> Bool in
//if let id = Summary["caseStudyTitle"] as? String
let tmp = text as! NSString
let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
print("THIS IS TEXT \(text)")
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
}
错误
运行上面的代码后,我收到以下错误:
Could not cast value of type '__NSCFDictionary' (0x10ef45c) to 'NSString' (0x460444).
在这一行:
let tmp = text as! NSString
数据结构
以下是JSON数据的结构,dta变量包含此数据。
[
{
"_id":"qweqwqw",
"caseStudyTitle":"Title",
"caseStudyLink":"link",
"sector":"sec one",
"__v":0
},
{
"_id":"qweqwqw",
"caseStudyTitle":"Title",
"caseStudyLink":"link",
"sector":"sec one",
"__v":0
},
{another object},
{another object} ]
结束游戏
我希望能够过滤UITableView上显示的数据。 如果用户在搜索栏中键入内容,UITableView将使用过滤后的数据重新加载。
此外,我只需要搜索案例研究标题&部门领域。
如果您需要更多信息以解决此问题,请告诉我们。
答案 0 :(得分:1)
您目前正在NSDictionary
投放NSString
。
以下是根据标题和行业进行过滤的方法:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
// if let id = dta["caseStudyTitle"] as? String
filtered = dta.filter({ (text) -> Bool in
//Access the title and sectors
let tmpTitle = text["caseStudyTitle"] as! String
let tmpSector = text["sector"] as! String
//Create a range for both
let range1 = tmpTitle.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
let range2 = tempSector.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
print("THIS IS TEXT \(text)")
//Return true if either match
return range1 != nil || range2 != nil
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
}
答案 1 :(得分:0)
你的dta数组包含两个字典元素,而不是字符串元素。这就是为什么你得到一个错误,说你不能将字典转换成nsstring。
让tmp =文字为!的NSString
这里,text是字典,而不是String。