Мои данные не будут разархивированы, но они правильно сохранятся, когда пользователь использует приложение. Я проверил и использовал тот же код ранее в других приложениях, которые я написал.
func loadSurveys(){
guard let surveyData = UserDefaults.standard.object(forKey: "addedSurveys") as? NSData else {
print("No surveys found")
initSurveysArray()
return
}
guard let allSurveys = NSKeyedUnarchiver.unarchiveObject(with: surveyData as Data) as? addedSurveys else {
print("Could not unarchive")
return
}
surveys = allSurveys.surveys
}
Здесь я тоже его сохраняю,
func saveSurveys(){
let surveyData = NSKeyedArchiver.archivedData(withRootObject: surveys)
UserDefaults.standard.set(surveyData, forKey: "addedSurveys")
}
вот мой добавленный класс Surveys, и я реализовал NSCoding для всех своих классов, на которые есть ссылки
class addedSurveys: NSObject, NSCoding{
var surveys = [survey]()
override init(){}
convenience init(survey : [survey])
{
self.init()
self.surveys = survey
}
required init?(coder aDecoder: NSCoder) {
self.surveys = aDecoder.decodeObject(forKey: "addedSurveys") as! [survey]
}
func encode(with aCoder: NSCoder) {
aCoder.encode(surveys, forKey: "addedSurveys")
}
}
Вот объект исследования:
class survey: NSObject, NSCoding{
func encode(with aCoder: NSCoder) {
aCoder.encode(areas, forKey: "areas")
aCoder.encode(settings, forKey: "setting")
aCoder.encode(overview, forKey: "overview")
aCoder.encode(name, forKey: "name")
}
required init?(coder aDecoder: NSCoder) {
self.areas = aDecoder.decodeObject(forKey: "area") as? [areaProps] ?? [areaProps()]
self.settings = aDecoder.decodeObject(forKey: "settings") as? companySettings ?? companySettings()
self.overview = aDecoder.decodeObject(forKey: "overview") as? overviewProps ?? overviewProps()
self.name = aDecoder.decodeObject(forKey: "name") as? String ?? "ok"
}
var areas = [areaProps]()
var settings = companySettings(manager: "")
var overview = overviewProps(x: "", y: "", a: "", b: "", c: "", d: "", e: "", f: "", st: "", ct: "", stt: "")
var name = ""
override init() {
}
convenience init(areas: [areaProps], settings: companySettings, overview: overviewProps, name : String)
{
self.init()
self.areas = areas
self.settings = settings
self.overview = overview
self.name = name
}
}