2015-08-16 10 views
6

Ich habe eine kleine App, die ein paar Funktionen zum Speichern hat. Ich habe eine Datenmodellklasse genannt: Closet:Speichern Array mit NSCoding

class Department: NSObject, NSCoding { 
    var deptName = "" 
    var managerName = "" 

    var Task: [Assignment]? // <----- assignment class is in example 2 

    func encodeWithCoder(aCoder: NSCoder) { 

    aCoder.encodeObject(deptName, forKey: "deptName") 
    aCoder.encodeObject(managerName, forKey: "mngName") 
    // aCoder.encodeObject(Task, forKey: "taskArray") 

} 

    required init(coder aDecoder: NSCoder) { 

    super.init() 

    course = aDecoder.decodeObjectForKey("deptName") as! String 
    instructor = aDecoder.decodeObjectForKey("mngName") as! String 
    // Task = aDecoder.decodeObjectForKey("tasKArray") as? [Assignment] 

} 

override init() { 
    super.init() 
} 

} 

Das ist also das Haupt-Controller-Datenmodell, das in dem ersten View-Controller, ein Benutzer in der Lage ist, die Taste „+“ zu tippen hinzufügen Name und Name der Abteilung. Das Problem besteht nicht darin, dies zu speichern, da ich es erfolgreich mit NSKeyedArchive speichern und es beim Start der App zurücklade.

Das Problem:

Ich möchte eine Reihe von Aufgaben auf diesem DatenmodellAbteilung Zuordnung genannt hinzuzufügen, die einen Titel und eine Notiz Variable haben würden. Dies ist das Datenmodell für Assignment:

Assignment.swift

class Assignment: NSObject, NSCoding { 
    var title = "" 
    var notes = "" 

     func encodeWithCoder(aCoder: NSCoder) { 

    // Methods 
    aCoder.encodeObject(title, forKey: "Title") 
    aCoder.encodeObject(notes, forKey: "notepad") 

} 

required init(coder aDecoder: NSCoder) { 


// Methods 
    title = aDecoder.decodeObjectForKey("Title") as! String 
    notes = aDecoder.decodeObjectForKey("notepad") as! String 

    super.init() 
} 

override init() { 
    super.init() 
} 


} 

Also, was ich im Wesentlichen zu erreichen versuchen, ist eine Anwendung, wo ein Benutzer verschiedene Abteilungen mit unterschiedlichen Namen, die Manager tritt in Arbeit Jetzt in meiner App, aber innerhalb einer Abteilung, der Benutzer kann klicken Sie auf die Schaltfläche "+", um eine Zuordnung Titel und Notizen Abschnitt hinzufügen, die bearbeitet werden können, wenn angeklickt, die ich später handhaben kann. Diese Aufgaben unterscheiden sich von Abteilung zu Abteilung.

Mein großes Problem ist das Erreichen dieser Funktionalität. Ich kann nicht scheinen, dass das funktioniert.

Ich möchte diese Array-Zuweisung Eigenschaft Teil der Abteilung Klasse sein, so dass jede Zelle ihre eigene Art von To-Do-Liste haben kann. Jede Hilfe würde mir auf jeden Fall helfen. Danke :)

+0

Irgendwelche Hilfe bei diesem kleinen Problem ohne Kerndaten? – Amit

Antwort

9

Sie verwenden NSCoder richtig, aber es gibt zwei Fehler in Groß- und Kleinschreibung. Der erste Fehler betrifft die Funktionalität der Anwendung und der zweite Fehler ist ein stilistischer Fehler. Sie haben Task mit dem Schlüssel "taskArray" codiert, aber Sie haben versucht, es mit dem Schlüssel "tasKArray" zu entschlüsseln. Wenn Sie in letzterem das Kapital K festlegen, funktioniert Ihr Code.

Die zweite Großschreibung Fehler ist ein stilistischer Fehler: Task, wie alle Eigenschaften in Swift, sollte in lowCamelCase (lamaCase) geschrieben werden.

Achten Sie unbedingt auf die Einrückung. In der Programmierung gibt es spezielle Einrückungsregeln, die helfen, den Code zu verdeutlichen. Hier ist der korrigierte Code mit richtiger Groß- und Kleinschreibung:

class Department: NSObject, NSCoding { 
    var deptName = "" 
    var managerName = "" 

    var task: [Assignment]? 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeObject(deptName, forKey: "deptName") 
     aCoder.encodeObject(managerName, forKey: "mngName") 
     aCoder.encodeObject(task, forKey: "taskArray") 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init() 

     course = aDecoder.decodeObjectForKey("deptName") as! String 
     instructor = aDecoder.decodeObjectForKey("mngName") as! String 
     task = aDecoder.decodeObjectForKey("taskArray") as? [Assignment] 
    } 

    override init() { 
     super.init() 
    } 
} 

class Assignment: NSObject, NSCoding { 
    var title = "" 
    var notes = "" 

    func encodeWithCoder(aCoder: NSCoder) { 
     // Methods 
     aCoder.encodeObject(title, forKey: "Title") 
     aCoder.encodeObject(notes, forKey: "notepad") 
    } 

    required init(coder aDecoder: NSCoder) { 
     // Methods 
     title = aDecoder.decodeObjectForKey("Title") as! String 
     notes = aDecoder.decodeObjectForKey("notepad") as! String 

     super.init() 
    } 

    override init() { 
     super.init() 
    } 
} 
+0

Ich werde versuchen, meinen Code umzuformen und zu sehen, ob es funktioniert. Aber im Wesentlichen versuche ich, Daten in Daten zu speichern. Übergeordnete Zellen mit untergeordneten Zellen beim Aufzeichnen einer übergeordneten Zelle würden untergeordnete Zellen mit der Klasse "Zuweisung" als Datenmodell anzeigen, die einen "Titel" und "Notizen" enthalten – Amit

Verwandte Themen