gpt4 book ai didi

swift - 在 Swift 中使用 NSCoding 协议(protocol)

转载 作者:可可西里 更新时间:2023-11-01 00:24:31 26 4
gpt4 key购买 nike

我在 Swift 中实现 NSCoding 时遇到了问题。我构建了以下基本类来演示该问题。当我运行此代码时,出现运行时错误,例如:

“SForwarding:警告:类‘_TtC4Projet5Test’的对象 0x102801f60 未实现 methodSignatureForSelector:-- 前方有问题”

我看到其他示例代码包括 NSObject 作为基类,但我使用的是纯 Swift 实现,NSCoding 的文档似乎没有将此作为要求提及。

如有任何帮助,我们将不胜感激!

谢谢。

class Test: NSCoding {
var array: [String]?

init() {

}

required init(coder decoder: NSCoder!) {
array = decoder.decodeObjectForKey("array") as? [String]
}

func encodeWithCoder(aCoder: NSCoder!) {
aCoder.encodeObject(self.array, forKey: "array")
}
}

var myTest = Test()
myTest.array = [String]()
myTest.array!.append("Nick")
NSKeyedArchiver.archiveRootObject(myTest, toFile: "/Users/test/Desktop/test.archive")

最佳答案

问题是 Test 不是从 NSObject 派生的。它需要,否则将会(如消息所说)前方有麻烦。

class Test: NSObject, NSCoding {

原因是 NSCoding 对实例将响应的其他消息做出了各种假设 - 例如 methodSignatureForSelector:。非 NSObject 类不会那样做。如果您查看 NSObject(和 NSObjectProtocol)的文档,您会发现那里有很多重要的东西,如果您不是从 NSObject 派生的,那么您将放弃所有这些东西。

the documentation for NSCoding doesn't seem to mention this as a requirement

因为 NSCoding 已经存在了 20 年,而 Swift 才刚刚出现。您不能指望文档会提到这样的事情。来自 Objective-C Cocoa API 的东西显然需要 Objective-C Cocoa 对象。

关于swift - 在 Swift 中使用 NSCoding 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com