当前位置: 首页 > 面试题库 >

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

印高阳
2023-03-14
问题内容

我有一堂课

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

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

首先,我不确定如何正确编写编码器和解码器。因此,对于初始化,我编写了两种方法。

当我尝试执行此代码时:

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类继承来将类桥接到Objective-C
NSObject

有关更多信息,请参见结合使用Swift和Cocoa和Objective-C。



 类似资料:
  • 问题内容: 我有一个新闻和一个消息。所述含有选择加入到阵列时teamObjects的的tableView。我想将此数组添加到其中,以便可以从其中包含需要teamObjects的url请求的访问它们。但是我不断得到: “试图为关键团队插入非财产列表对象(“”) 如果有比将其存储在更好的方法,我愿意接受其他建议 方法 我的对象 问题答案: 实际上,您将需要将自定义对象归档到其中,然后将其保存到用户默认

  • 问题内容: 我想将-object 保存到Android存储中的某个位置以快速检索并在其中显示数据。 这可能吗?如果可以,那么SQLite或外部存储适合哪种技术? 问题答案: 例。 并从活动中致电 不要忘记在清单文件中使用write_external_storage权限。

  • 我有以下对象需要存储在Cassandra中。我需要使用UDT还是有其他方法来存储对象。我需要最终使用存储库方法从spry-boot应用程序存储它。

  • 问题内容: 我在Playground中使用Swift 3,Xcode 8.0拥有此功能: 创建人员数组 编码数组 保存到用户默认值 检查 从userDefaults返回 只需检查存档的数据 我无法正确将数据对象保存到userDefaults,此外,底部的检查还会产生错误“严重错误:在展开可选值时意外发现nil”。“检查”行还显示已保存的对象为nil。这是我对象的NSCoder中的错误吗? 问题答案

  • 问题内容: 我正在尝试快速过滤自定义对象的数组,以获取具有我要隔离的属性的数据子集。我的代码如下。 我的自定义对象如下: 但是,尝试编译此代码时,Xcode引发的错误是: 我正在使用Swift 1.2,似乎无法弄清楚自己在做什么。任何帮助,将不胜感激。 问题答案: 在Swift 1.2中,是一个全局函数,因此您不能说。(在Swift 2中,这将起作用。) 此外,不能与此类字符串一起使用。我建议使用

  • 现在如何按照MyClass对象的名称对数组进行排序。