当我尝试打印字典键fromdate
的值时,即使它包含具有特定键的值,也会显示错误。
线程1:致命错误:展开包装时意外发现nil 可选值
这是用于在字典中保存值的代码。
func saveRecentSearch() {
var dictSearch = [String:Any]()
if let onJourney = Global.onWordJ {
dictSearch["From"] = onJourney.source?.CM_CityName
dictSearch["Fromid"] = onJourney.source?.CM_CityID
dictSearch["To"] = onJourney.destination?.CM_CityName
dictSearch["Toid"] = onJourney.destination?.CM_CityID
let date = onJourney.journeyDate
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let myString = formatter.string(from: date!)
let yourDate: Date? = formatter.date(from: myString)
formatter.dateFormat = "dd-MMM-yyyy"
let updatedString = formatter.string(from: yourDate!)
print(updatedString)
dictSearch["fromdate"] = updatedString
}
键fromdate
已保存该日期。检查图像
但是当我尝试检索该数据时,在“ fromdate”键中找不到nil。这是代码。
var arrSearch = [[String:Any]]()
override func viewDidLoad() {
super.viewDidLoad()
if let arr = UserDefault["Search"] {
arrSearch.append(contentsOf: (arr as! [[String:Any]]))
}
self.tblSearch.reloadData()
}
tableView方法
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "RecentCell") as! RecentCell
cell.selectionStyle = .none
let dict = arrSearch[indexPath.row]
cell.lblFrom.text = (dict["From"] as! String)
cell.lblTo.text = (dict["To"] as! String)
let strDate = (dict["fromdate"])
cell.lblDate.text = (strDate as! String) //This line showing Error
return cell
}
代码有什么问题?我得到了fromdate
键值以外的所有值。
答案 0 :(得分:3)
这是因为JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
Formatting = Formatting.Indented
});
期望dictSearch
作为变量,但是您传递的是Any
,因此它崩溃了:
也许所有变量都是字符串,请将其更改为:
String
如果不是,则需要将日期强制转换为任何非字符串
不建议这样做,但是请尝试以下方法:
var dictSearch = [String:String]()
答案 1 :(得分:1)
您应该通过铸造从字典中获得价值。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "RecentCell") as! RecentCell
cell.selectionStyle = .none
let dict = arrSearch[indexPath.row]
cell.lblFrom.text = (dict["From"] as! String)
cell.lblTo.text = (dict["To"] as! String)
if let strDate = (dict["fromdate"] as? String)
{
cell.lblDate.text = strDate
}
return cell
}