繁体   English   中英

在Swift 3.1中将自己的对象数组添加到UserDefaults时出错

[英]Error while adding array of own objects to UserDefaults in Swift 3.1

不幸的是,我无法将自己的类对象列表添加到UserDefaults 生成以下错误:

NSForwarding:警告:类'ClrLearn.highscoreStructure'的对象0x6080002502c0没有实现methodSignatureForSelector:-提前发生故障无法识别的选择器-[ClrLearn.highscoreStructure> replacementObjectForKeyedArchiver:]

该类如下所示(已根据堆栈上的各种主题进行了修改,例如,一个- 如何在NSUserDefaults中存储自定义对象 ):

class highscoreStructure {
    var name : String = ""
    var score : Int = 0

    init(name: String, score: Int) {
        self.name = name
        self.score = score
    }

    required init(coder decoder: NSCoder) {
        self.name = decoder.decodeObject(forKey: "name") as? String ?? ""
        self.score = decoder.decodeInteger(forKey: "score")
    }

    func encode(with coder: NSCoder) {
        coder.encode(name, forKey: "name")
        coder.encode(score, forKey: "score")
    }
}

好的,感觉就像我对Stack规则犯了一些错误,对不起,rmaddy-我是第一次也是最后一次。 :)

但是回到问题,第一部分已由vadian解决-非常感谢! 但是我的应用程序的那部分仍然不能正常工作:我已经将rootObject(NSKeyedArchiver.archivedData(withRootObject:highscoreStructObjects))设置为我的对象数组(如此愚蠢的错误!),但仍然存在类似这样的错误:

[ClrLearn.HighscoreStructure encodeWithCoder:]:无法识别的选择器已发送到实例0x6080002586c0

要么

由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“-[[ClrLearn.HighscoreStructure> encodeWithCoder:]:无法识别>选择器已发送至实例> 0x6080002586c0” –

附言 我不确定这是我应该出错的地方-调试日志对我来说仍然一点都不清晰,至少在Visual Studio中不是干净的。 :)也许我应该粘贴其他东西?

点子 这行代码如下所示:

let encodedData = NSKeyedArchiver.archivedData(withRootObject:     highscoreStructObjects)
UserDefaults.standard.set(encodedData, forKey: "highscores")

为了能够实现NSCoding ,该类必须NSObject继承。

class HighscoreStructure : NSObject { ...

顺便说一句,类名应该以大写字母开头。

而且decodeObject(forKey: "name")永远不会nil您可以放心地编写

self.name = decoder.decodeObject(forKey: "name") as! String

好的,我希望这次我不会犯任何错误-该问题已由rmaddy在其他“主题”中解决,但是vadian非常非常但非常接近-要实现NSCoding,我需要继承他写的NSObject,但来自... NSCoding! 这不是很明显吗? 对我而言,这不是...另一方面,也许他试图告诉我我应该继承两者,但我的英语太糟糕了。 无论如何,我找到了答案,所以非常感谢您Vadian,Rmaddy和我很抱歉再次违反某些SOF规则……这是第一次也是最后一次! 哦,当我终于找到答案时,有一个线程,是的,我是盲人,我想早点错过它-encodeWithCoder:无法识别的选择器发送到实例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM