iOS Swift: enregistrer un tableau de classes personnalisées

Je suis nouveau en programmation. Je fais un petit programme de base de données pour iOS en swift.

J'ai une classe de personne:

class Person : NSObject {
    var firstName : String
    var lastName : String

    init (firstName : String, lastName : String) {
        self.firstName = firstName
        self.lastName = lastName
    }
}

Je déclare un tableau de la classe dans le haut de mon point de vue, contrôleur:

    var peopleArray = [Person]()

Je puis remplir le tableau en déclarant quelques exemples d'utilisateurs et les ajouter au tableau:

    var nateB = Person(firstName: "Nate", lastName: "Birkholz")
    var nateC = Person(firstName: "Nate", lastName: "Carson")
    var nateD = Person(firstName: "Nate", lastName: "Donnelly")
    self.peopleArray.append(nateB)
    self.peopleArray.append(nateC)
    self.peopleArray.append(nateD)

J'ai ensuite essayer d'enregistrer les données dans un fichier plist:

        let fileManager = (NSFileManager.defaultManager())
        let directorys : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.AllDomainsMask, true) as? [String]

        if (directorys != nil){
            let directories:[String] = directorys!;
            let pathToFile = directories[0]; //documents directory
            let plistfile = "PeopleArray.plist"
            let plistpath = pathToFile.stringByAppendingPathComponent(plistfile);

            if !fileManager.fileExistsAtPath(plistpath){ 

                println("Declaring cocoaArray")
                var cocoaArray : NSArray = peopleArray
                cocoaArray.writeToFile(plistpath, atomically: true)
            println("I wrote an array to the file at\n\n\(plistpath)")
            }

Le fichier plist n'est pas créé, son silence ne parvient pas à créer et de la fonction complète que si elle avait. Toutes les pensées?

L'obscur de la compatibilité des processus de la swift types de données et structures de données avec le cacao en classes est frustrant pour moi. Je veux juste enregistrer une danged fichier. Je ne peux pas utiliser la fonction "append" si je déclare mon tableau comme un NSArray, je ne peux += un élément dans le tableau...

Mise à jour:

J'ai ajouté les fonctions suivantes de ma classe Personne:

func encodeWithCoder(aCoder: NSCoder!) {
    aCoder.encodeObject(firstName, forKey:"firstName")
    aCoder.encodeObject(lastName, forKey:"lastName")
}

init (coder aDecoder: NSCoder!) {
    self.firstName = aDecoder.decodeObjectForKey("firstName") as String
    self.lastName = aDecoder.decodeObjectForKey("lasName") as String
}

De l'enregistrement du fichier est maintenant:

let fileManager = (NSFileManager.defaultManager())
        let directorys : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.AllDomainsMask, true) as? [String]

        println("value of directorys is \(directorys)")

        if (directorys != nil){
            let directories:[String] = directorys!;
            let pathToFile = directories[0]; //documents directory

            let plistfile = "PeopleArray.plist"
            let plistpath = pathToFile.stringByAppendingPathComponent(plistfile);

            if !fileManager.fileExistsAtPath(plistpath){  //writing Plist file

                self.createInitialPeople()

                println("Declaring cocoaArray")
                var cocoaArray : NSArray = [NSKeyedArchiver.archivedDataWithRootObject(peopleArray)]
                println("writing to path")
                cocoaArray.writeToFile(plistpath, atomically: true)
                let tellMe = cocoaArray.writeToFile(plistpath, atomically: true)
                println("Return of write is \(tellMe)")
            } 

Un fichier Plist avec insondables de données est créé.

Je ferme l'application et commencer à nouveau, j'ai ensuite essayer de trop charger le fichier:

         else {            //Reading Plist file
            println("\n\nPlist file found at \(plistpath)")

            let cocoaArray = NSMutableArray.arrayWithContentsOfFile(plistpath)

            peopleArray = cocoaArray as Array
        }
    }

Et j'échoue parce que je ne peux pas abattu "AnyObject n'est pas identique à "Personne". J'ai essayé de passer de plusieurs manières, et juste ne peut pas le faire avec succès. C'est vraiment frustrant.

source d'informationauteur Nate Birkholz | 2014-08-16