Так что у меня проблема. Я делаю это приложение, которое в настоящее время хранит информацию для «Курсов». Тем не менее, я менял приложение много, и теперь мне нужен словарь курсов. Мне нужно сохранить этот словарь курсов и загрузить его из любого класса.Как хранить словарь массивов пользовательских объектов с помощью NSCoding swift
В настоящее время в курсе.swift У меня есть настройка NSCoding. Моя программа записывает и читает всю информацию о курсе. Но теперь я хочу изменить его так, чтобы он записывал этот словарь вместо всех курсов. У меня нет другого класса данных, который содержит этот словарь, его просто удерживают в моем «StartUpViewController.swift».
class Course: NSObject, NSCoding {
// MARK: Properties
var courseName : String
var projects : [String]
var projectMarks : [Double]
var projectOutOf : [Double]
var projectWeights : [Double]
// MARK: Archiving Paths
static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.appendingPathComponent("courses")
// MARK: Types
struct PropertyKey {
static let courseNameKey = "courseName"
static let projectsKey = "projects"
static let projectMarksKey = "projectMarks"
static let projectOutOfKey = "projectOutOf"
static let projectWeightsKey = "projectWeights"
}
// MARK: NSCoding
func encode(with aCoder: NSCoder) {
aCoder.encode(courseName, forKey: PropertyKey.courseNameKey)
aCoder.encode(projects, forKey: PropertyKey.projectsKey)
aCoder.encode(projectMarks, forKey: PropertyKey.projectMarksKey)
aCoder.encode(projectOutOf, forKey: PropertyKey.projectOutOfKey)
aCoder.encode(projectWeights, forKey: PropertyKey.projectWeightsKey)
}
required convenience init?(coder aDecoder: NSCoder) {
let courseName = aDecoder.decodeObject(forKey: PropertyKey.courseNameKey) as! String
let projects = aDecoder.decodeObject(forKey: PropertyKey.projectsKey) as! [String]
let projectMarks = aDecoder.decodeObject(forKey: PropertyKey.projectMarksKey) as! [Double]
let projectOutOf = aDecoder.decodeObject(forKey: PropertyKey.projectOutOfKey) as! [Double]
let projectWeights = aDecoder.decodeObject(forKey: PropertyKey.projectWeightsKey) as! [Double]
self.init(courseName: courseName, projects: projects, projectMarks: projectMarks, projectOutOf: projectOutOf, projectWeights: projectWeights)
}
Как мне это сделать? Поддерживаю ли я курс Course.swift с помощью NSCoding, или мне нужно только поместить NSCoding в свой контроллер просмотра?
class StartUpViewController: UIViewController {
var groups: [String: [Course]?] = [:]
...
}
Спасибо за ваш ответ, у меня есть еще один вопрос. Теперь, когда я иду, чтобы сохранить все, мне нужно только сохранить «группы» или мне нужно позвонить, чтобы сохранить все курсы? – Logan
Вам просто нужно сохранить группу, которая автоматически сохранит курсы. –