Я новичок в быстром и пытаюсь сохранить данные. Я создал класс под названием «Студенты», в котором я храню основные свойства студента, такие как имя и массив объектов расписания. Расписание — это еще один класс, который содержит счетчик для каждого экземпляра расписания.
class Students: NSObject, NSCoding{
var name: String = ""
var schedule = [Schedule]()
static let DocumentsDirectory = NSFileManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("students")
struct PropertyKey {
static let nameKey = "name"
static let scheduleKey = "schedule"
}
init(name: String, schedule: [Schedule]){
self.name = name
self.schedule = schedule
super.init()
}
init(name: String)
{
self.name = name
super.init()
}
func addClass(className: String){
let scheduleItem = Schedule()
scheduleItem.scheduleName = className
schedule.append(scheduleItem)
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name,forKey: PropertyKey.nameKey)
aCoder.encodeObject(schedule, forKey: PropertyKey.scheduleKey)
}
required convenience init?(coder aDecoder: NSCoder){
let name = aDecoder.decodeObjectForKey(PropertyKey.nameKey) as! String
let schedule = aDecoder.decodeObjectForKey(PropertyKey.scheduleKey) as! [Schedule]
self.init(name: name, schedule: schedule)
}
}
class Schedule{
var counter = 0
var scheduleName: String = ""
func increase()
{
counter += 1
}
func reset()
{
counter = 0
}
}
Моя проблема в том, что когда я вызываю свой метод сохранения
func save(){
let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(students, toFile: Students.ArchiveURL.path!)
if !isSuccessfulSave {
print("Failed to save meals...")
}
}
Я получаю ошибку из строки
aCoder.encodeObject(schedule, forKey: PropertyKey.scheduleKey)
Почему он не дает мне сохранить массив объектов расписания?