当此代码在全新的应用程序安装上运行时,它可以很好地工作。但是,如果以前没有任何数据保存在设备上,则此功能会导致应用崩溃。
我收到错误Could not cast value of type __NSCFDictionary to NSData
,它在以下行中返回线程零错误:
playlists = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(playlistsData as! Data) as! [String:[Song]]
这是我下面的全部功能代码:
func getPlaylists() -> [String:[Song]] {
var playlists: [String:[Song]] = [:]
let playlistsData = defaults.object(forKey: "user_playlists")
if playlistsData != nil {
playlists = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(playlistsData as! Data) as! [String:[Song]]
}
return playlists
}
答案 0 :(得分:0)
第一次工作是因为test1.csv
在开始时为零
playlistsData
您应该将对象存储在 let playlistsData = defaults.object(forKey: "user_playlists")
>>>>>> hereis the crash >>>>> playlistsData as! Data
中,而不要使用{p>
Data
答案 1 :(得分:0)
为了安全地获取数据,请将方法更改为
func getPlaylists() -> [String:[Song]] {
guard let playlistsData = defaults.data(forKey: "user_playlists"),
let playlists = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(playlistsData) as? [String:[Song]] else { return [:] }
return playlists
}
由于您之前将字典保存到UserDefaults
而不是Data
中,所以发生错误的方式。
您可能是说但是,当先前已保存 数据时 ...