【发布时间】:2017-06-15 10:29:52
【问题描述】:
我正在尝试使用 UserDefaults 保存自定义文件,但我的应用程序由于以下原因崩溃:
致命错误:在展开可选值时意外发现 nil
这是我的代码,在我的自定义类中我声明了一个空数组
class AppDefualts: NSObject {
var downloadedURLArray = [DownloadFile]() //Declare an empty array
override init() {
super.init()
downloadedURLArray = loadStoredURL()
}
//Store data
func addStored(file:DownloadFile) {
//Add URL to array and save it
downloadedURLArray.append(file)
let data = NSKeyedArchiver.archivedData(withRootObject: downloadedURLArray)
UserDefaults.standard.set(data, forKey: "storedURL")
}
//Load:
func loadStoredURL() -> Array<DownloadFile> {
let data = UserDefaults.standard.data(forKey: "storedURL")
downloadedURLArray = NSKeyedUnarchiver.unarchiveObject(with: data!) as? [DownloadFile] ?? [DownloadFile]()
return downloadedURLArray
}
任何帮助都会很棒
编辑 1:
我添加了NSCoding 协议:
func encode(with aCoder: NSCoder) {
aCoder.encode(downloadedURLArray, forKey: "storedURL")
}
required init?(coder aDecoder: NSCoder) {
downloadedURLArray = aDecoder.decodeObject(forKey: "storedURL") as! [DownloadFile]
}
现在应用程序因此而崩溃:
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -encodeObject:forKey: 无法发送到 NSCoder 类的抽象对象:创建一个 具体实例!'
【问题讨论】:
-
阅读数据存储指南。你试图做的完全是错误的。
标签: ios arrays iphone swift xcode