【发布时间】:2015-11-03 13:37:11
【问题描述】:
情况
我有一个应用程序可以从我构建的 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 会重新加载过滤后的数据。
另外我只需要搜索案例研究标题和行业字段。
如果您需要更多信息来解决此问题,请告诉我。
【问题讨论】:
-
您是否要根据标题或 JSON 对象的任何属性进行归档?
-
@Caleb 过滤器基于标题和部门。只有这两个字段。
-
我建议为 JSON 对象中的数据创建一个类。过滤和我们以后会容易得多。如果您不想这样做,可以使用
let tempTitle = text["caseStudyTitle"] as! String访问标题和扇区。 -
@Caleb 谢谢你的回复。我只是对在哪里以及如何使用那行代码感到困惑。如果您查看我的代码,我将同一行注释掉。关于在当前代码中如何以及在何处实际实现这一行的任何建议?再次感谢
标签: swift uitableview swift2 uisearchbar