Почему мои данные не разархивируются, когда я вызываю их при открытии приложения - PullRequest
0 голосов
/ 14 марта 2019

Мои данные не будут разархивированы, но они правильно сохранятся, когда пользователь использует приложение. Я проверил и использовал тот же код ранее в других приложениях, которые я написал.

   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
    }
}
...