hel*_*ikh 3 ios uisearchresultscontroller swift uisearchcontroller
我有一个非常奇怪的问题,我无法弄清楚这里出了什么问题。
这是我的代码
func updateSearchResultsForSearchController(searchController: UISearchController) {
filterTableData.removeAll(keepCapacity: false)
let searchWord = searchController.searchBar.text!
getCountriesNamesFromServer(searchWord)
let searchPredict = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
newTableData = [String]()
for var i = 0; i < self.dict.count - 1; i++ {
let cityName = (((self.dict["\(i)"] as?NSDictionary)!["City"] as?NSDictionary)!["name"] as?NSString)! as String
let countryName = (((self.dict["\(i)"] as?NSDictionary)!["Country"] as?NSDictionary)!["name"] as?NSString)! as String
print("countryName is \(countryName)")
newTableData.append(cityName)
}
print("newTableData is \(newTableData)" )
let array = (newTableData as NSArray).filteredArrayUsingPredicate(searchPredict)
print("array is\(array)")
filterTableData = array as! [String]
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
程序在这一行崩溃
let countryName = (((self.dict["\(i)"] as?NSDictionary)!["Country"] as?NSDictionary)!["name"] as?NSString)! as String
Run Code Online (Sandbox Code Playgroud)
当我在搜索框中输入第一个字符时一切正常,但是一旦我在searchBox程序中输入第二个字符就会崩溃并给我这个错误
无法将“NSNull”(0x1a03c3768)类型的值转换为“NSString”(0x1a03cd798)。
并且对于您的信息 countryNames 存在于dict变量中,但我不知道为什么它给我空值以及为什么城市名称成功工作,因为国家也存在于我从中获取城市的同一个数组中
更新:
此行成功打印国家名称
print("countryName is \(countryName)")
Run Code Online (Sandbox Code Playgroud)
好吧,他们告诉你问题是什么:你得到了 NSNull 类型的结果,而 NSNull不能转换为 NSString。
您很可能正在处理 JSON,而 JSON 数据通常包含空值。
远离你的迷宫?和 !
写一些对你有帮助的代码。记住任何!如果你没有得到你所期望的,将会使你的应用程序崩溃。
当您访问字典中的键“名称”时,您需要处理存在字符串(对您来说很好)、没有(键不存在,很常见)、null(服务器明确告诉您有没什么,很常见),数字,布尔值,字典或数组。
对于这些情况中的每一种,请告诉我您想要什么结果:崩溃?一个可选的为零的字符串?空字符串?通常,如果存在字符串,则可能需要将数字转换为字符串,如果是数字,则可能需要将数字转换为字符串,如果键不存在或为空,则可能需要 nil 或空字符串,如果出现崩溃或 nil布尔值、字典或数组。
然后编写一个函数,返回正是那个。然后你使用它。当你写 (... as? NSString) 时!你告诉编译器你想要崩溃,如果它不是一个字符串,那就是你得到的。
| 归档时间: |
|
| 查看次数: |
7723 次 |
| 最近记录: |