ios – 如何存档和取消归档Swift中的自定义对象?或者如何将自定义对象保存到Swift中的NSUserDefaults?

ios – 如何存档和取消归档Swift中的自定义对象?或者如何将自定义对象保存到Swift中的NSUserDefaults?,第1张

概述我有一个班 class Player { var name = "" func encodeWithCoder(encoder: NSCoder) { encoder.encodeObject(name) } func initWithCoder(decoder: NSCoder) -> Player { self.name = 我有一个班
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    }}

我想要序列化并保存到用户默认值.

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

当我尝试执行这个代码:

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

应用程式崩溃,我收到这则讯息:

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

我做错了什么?

解决方法 NSKeyedArchiver只能使用Objective-C类,而不是纯粹的Swift类.您可以通过使用@objc属性或通过继承自Objective-C类(如NSObject)来将您的类桥接到Objective-C.

有关更多信息,请参阅Using Swift with Cocoa and Objective-C.

总结

以上是内存溢出为你收集整理的ios – 如何存档和取消归档Swift中的自定义对象?或者如何将自定义对象保存到Swift中的NSUserDefaults?全部内容,希望文章能够帮你解决ios – 如何存档和取消归档Swift中的自定义对象?或者如何将自定义对象保存到Swift中的NSUserDefaults?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1095189.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存