ERROR: Thread 1: Signal SIGABRT (While append the element in the Array)

ERROR: Thread 1: Signal SIGABRT (While append the element in the Array)

当我尝试将元素追加到数组中时,错误是 shown.Here 是代码。

func saveRecentSearch()  {
        var dictSearch = [String:Any]()
        if let onJourney = Global.onWordJ {
            dictSearch["From"] = onJourney.source
            dictSearch["Fromid"] = Global.onWordJ?.source?.CM_CityID
            dictSearch["To"] = Global.onWordJ?.destination
            dictSearch["Toid"] = Global.onWordJ?.destination?.CM_CityID
        }
        if let onJourney = Global.returnJ {
            dictSearch["todate"] = onJourney.journeyDate!
        }
        var arr = [[String:Any]]()
        if let arrSearch = UserDefault["Search"] {
            DispatchQueue.main.async {
                arr.append(arrSearch as! [String : Any])
                arr.append(dictSearch)
            }
        } else {
            arr.append(dictSearch)
        }
        UserDefault["Search"] = arr
    }

我在 cellForRowAt indexPath tableView 方法中调用了这个函数。

您应该已经在问题中显示了错误消息。错误很明显。

Search 的值是一个 数组 因此强制转换 as! [String : Any] 字典 失败.

将代码更改为

...
var arr = [[String:Any]]()
if let arrSearch = UserDefault["Search"] as? [[String : Any]] {
   arr.append(contentsOf: arrSearch)
}
arr.append(dictSearch)
UserDefault["Search"] = arr
...

分派到主线程,不需要 else 子句。