Comment archiver et désarchiver des objets personnalisés dans Swift? Ou comment économiser de l'objet personnalisé à NSUserDefaults dans Swift?

J'ai une classe

class Player {

    var name = ""

    func encodeWithCoder(encoder: NSCoder) {
        encoder.encodeObject(name)
    }

    func initWithCoder(decoder: NSCoder) -> Player {
        self.name = decoder.decodeObjectForKey("name") as String
        return self
    }

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

    init(name: String) {
        self.name = name
    }
}

et je veux serialise et de l'enregistrer à l'utilisateur par défaut.

Tout d'abord, je ne suis pas sûr de la façon d'écrire correctement le codeur et le décodeur. Donc, pour l'init, j'ai écrit deux méthodes.

Lorsque j'essaie d'exécuter ce code:

func saveUserData() {
    let player1 = Player(name: "player1")
    let myEncodedObject = NSKeyedArchiver.archivedDataWithRootObject(player1)
    NSUserDefaults.standardUserDefaults().setObject(myEncodedObject, forKey: "player")
}

application se bloque et je reçois ce message:

*** NSForwarding: warning: object 0xebf0000 of class '_TtC6GameOn6Player' does not implement methodSignatureForSelector: -- trouble ahead

Que dois-je faire de mal?

  • Juste pour envoyer un buzz, récemment, j'ai fait un post sur Swift forum de répondre à une question similaire, j'espère que ça aide. devforums.apple.com/message/1044432#1044432
  • cela fonctionne parfaitement :).
InformationsquelleAutor tadasz | 2014-07-09