2017-08-25 6 views
1

Ich bin relativ neu in der iOS-Entwicklung im Allgemeinen, aber ich kodiere diese App.NSCoding in Swift archiviert Daten nicht richtig?

Ich habe benutzerdefinierte Objekte "Semester", "Kurs" und "Zuordnungen". Semester enthalten Arrays von Kursen und Kurse enthalten Arrays von Zuordnungen. Ich kann die Semester- und Kursinformationen richtig archivieren, aber aus irgendeinem Grund können die Zuweisungsinformationen nicht gelesen werden.

Semester:

required init?(coder aDecoder: NSCoder) { 
    self.name = "" 

    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "name") as? String { 
     name = archivedName 
    } 
    if let archivedCourses = aDecoder.decodeObject(forKey: "courses") as? [Course] { 
     courses = archivedCourses 
    } 
} 

func encode(with aCoder: NSCoder) { 
    aCoder.encode(name, forKey: "name") 
    aCoder.encode(courses, forKey: "courses") 
} 

Kurs:

required init?(coder aDecoder: NSCoder) { 
    self.name = "" 
    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "courseName") as? String { 
     name = archivedName 
    } 
    if let archivedAssignments = aDecoder.decodeObject(forKey: "assignments") as? [Assignment] { 
     assignments = archivedAssignments 
    } 
} 

func encode(with aCoder: NSCoder) { 
    aCoder.encode(name, forKey: "courseName") 
    aCoder.encode(assignments, forKey: "assignments") 

Aufgabe:

required init?(coder aDecoder: NSCoder) { 
    self.name = "" 
    self.grade = 0 
    self.weight = 0 
    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "assignmentName") as? String, let archivedGrade = aDecoder.decodeObject(forKey: "assignmentGrade") as? Int, let archivedWeight = aDecoder.decodeObject(forKey: "assignmentWeight") as? Int { 
     name = archivedName 
     grade = archivedGrade 
     weight = archivedWeight 
    } 
} 

func encode(with aCoder: NSCoder) { 
    aCoder.encode(name, forKey: "assignmentName") 
    aCoder.encode(grade, forKey: "assignmentGrade") 
    aCoder.encode(weight, forKey: "assignmentWeight") 
} 

Ich bin mir nicht sicher, warum, aber die Zuordnungsdetails nicht gelesen werden kann, wenn ich versuche, dekodiere das Objekt.

+0

decoderObject eine haben spezielle Methode zum Entschlüsseln von Ints –

+0

Hat meine Antwort Ihnen geholfen? jedes Feedback ist zu schätzen, danke –

+0

Ja, tat es! Danke für Ihre Hilfe!! –

Antwort

0

ich dekodieren Normalerweise Int wie dieses

if decoder.containsValue(forKey: "teamNumber"){ 
    self.teamNumber = decoder.decodeInteger(forKey: "teamNumber") 
} 

zu Ihrem Problem übersetzt wird so sein, ändern Sie die init?(coder aDecoder: NSCoder) Methode Ihrer Assignment Klasse

required init?(coder aDecoder: NSCoder) { 

    self.name = "" 
    self.grade = 0 
    self.weight = 0 
    super.init() 

    if let archivedName = aDecoder.decodeObject(forKey: "assignmentName") as? String{ 
     self.name = archivedName 
    } 

    if decoder.containsValue(forKey: "assignmentGrade"){ 
     self.grade = decoder.decodeInteger(forKey: "assignmentGrade") 
    } 

    if decoder.containsValue(forKey: "assignmentWeight"){ 
     self.weight = decoder.decodeInteger(forKey: "assignmentWeight") 
    } 

} 

hoffe, das hilft

Verwandte Themen