В моем приложении я хочу сохранить массив моего пользовательского класса UserSavedTextElement
.Это работает довольно хорошо, но когда я хочу сохранить строку, которая содержит более 512 символов, приложение вылетает с ошибкой:
Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения
Мой пользовательский класс:
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 символов?