如何归档和取消归档Swift中的自定义对象?或者如何保存自定义对象到NSUserDefaults在Swift? [英] How to archive and unarchive custom objects in Swift? Or how to save custom object to NSUserDefaults in Swift?

查看:282
本文介绍了如何归档和取消归档Swift中的自定义对象?或者如何保存自定义对象到NSUserDefaults在Swift?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类

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
    }
}

,我想序列化并保存为用户默认值。

and i want to serialise it and save to user defaults.

首先我不知道如何正确编写编码器和解码器。所以对于init我写了两个方法。

First of all I'm not sure how to correctly write encoder and decoder. So for init i wrote two methods.

当我尝试执行这个代码:

When i try to execute this code:

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



app crashes and i get this message:

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

我做错了什么?

推荐答案

NSKeyedArchiver只能使用Objective-C类,而不是纯Swift类。您可以通过使用 @objc 属性标记类或通过继承Objective-C类,例如 NSObject

NSKeyedArchiver will only work with Objective-C classes, not pure Swift classes. You can bridge your class to Obj-C by marking it with the @objc attribute or by inheriting from an Objective-C class, such as NSObject.

请参阅使用Swift与Cocoa和Objective-C 了解更多信息。

这篇关于如何归档和取消归档Swift中的自定义对象?或者如何保存自定义对象到NSUserDefaults在Swift?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆