在我的App中,我想存储一个自定义类UserSavedTextElement
的数组。效果很好,但是当我想要存储包含超过512个字符的字符串时,应用程序崩溃并显示错误:
线程1:致命错误:在展开可选值时意外发现nil
我的自定义类:
import Foundation
class UserSavedTextElement: NSObject, NSSecureCoding {
static var supportsSecureCoding: Bool = true
func encode(with aCoder: NSCoder) {
aCoder.encode(title, forKey: "title")
aCoder.encode(text, forKey: "text")
}
var title: String
var text: String
init(newTitle: String, newText: String){
self.title = newTitle
self.text = newText
}
required init(coder aDecoder: NSCoder) {
self.title = aDecoder.decodeObject(forKey: "title") as! String
self.text = aDecoder.decodeObject(forKey: "text") as! String
}
}
要保存数组,请使用:
do{
let textData = try NSKeyedArchiver.archivedData(withRootObject: textArray, requiringSecureCoding: true)
UserDefaults.standard.set(textData, forKey: "spokenTextHistory")
print("saved")
}catch{
print("not saved")
}
当字符串包含的字符数超过512个时,也会打印:“保存”
我要加载数组的代码(AppDelegate
-didFinishLaunchingWithOptions
):
let textData = UserDefaults.standard.object(forKey: "spokenTextHistory") as? NSData
if let textData = textData {
do{
let textDataArray = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, UserSavedTextElement.self], from: textData as Data) as? [UserSavedTextElement]
if let textDataArray1 = textDataArray {
textArray = textDataArray1
}
}catch{
print(error)
}
}
它压在这行上:
self.text = aDecoder.decodeObject(forKey: "text") as! String
应在其中保存数据的数组声明如下:
var textArray:[UserSavedTextElement] = []
如果它很重要:应该保存的字符串来自UITextView
如何保存超过512个字符?