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

编程入门 行业动态 更新时间:2024-10-06 20:35:40
本文介绍了如何归档和取消归档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?

本文发布于:2023-11-26 19:09:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1634831.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   对象   Swift   NSUserDefaults

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!