我有一个用户Class,它在应用程序终止时使用saveuser()方法。用户有两个自定义Arrays Classes,即子类NSObject.这是我的编码方法。
func encode(with aCoder: NSCoder) {
aCoder.encode(self.firstName, forKey: coderKey.fName)
aCoder.encode(self.lastName, forKey: coderKey.lName)
aCoder.encode(self.bio, forKey: coderKey.bio)
aCoder.encode(self.tags, forKey: coderKey.tags)
aCoder.encode(self.organizations, forKey: coderKey.orgs)
aCoder.encode(self.img, forKey: coderKey.img)
}该应用程序在编码self.tags时崩溃。我想它也会对self.organizations做同样的事情,因为它也是一个NSObjects的array,而可能是self.img,因为它是一个UIImage。这是我正在犯的错误。
由于未识别的异常“NSInvalidArgumentException”终止应用程序,原因:-Social_Justice.Tag encodeWithCoder::未识别的选择器发送到实例0x60000005efc0‘
我该怎么办才能解决这个问题呢?如果您需要看到更多的代码,只需注释,我将编辑。
发布于 2017-02-12 00:38:49
正如大卫·贝瑞在最初的文章中所评论的那样。您必须确保正在尝试编码的任何自定义类也符合NSCoder。他们不需要有存档路径,他们只需要有编码和解码功能。
发布于 2017-06-27 19:51:10
答案:
[ClassName/ObjectName methodName],它在某种程度上等同于ObjectName.function()样式,那么让我们暂时用这种方式来描述它( Swift编译器将来会更好,希望您在调试时不会再看到objctive-C警告)encodeWithCode()的方法,该方法实际上并不存在于标记和中( NSCoder系统知道如何编码数组,但不知道如何在数组中编码自己的对象)NSCoder系统的5个具体类,则对象必须符合NSCoding协议。这意味着类(标记和必须实现init?(coder: NSCoder)和func encode(with: NSCoder) )。NSCoder的4个具体类是NSArchiver, NSUnarchiver, NSKeyedArchiver, NSKeyedUnarchiver, and NSPortCoder.。继续阅读:
NSCoding /NSKeyed存档器(由NSHipster编写)
或者:(我最喜欢的)
或者:(如果那些文件对你来说还有点混乱)
Hollemans M. 2016,iOS学徒第五版教程2核对表,第126页~第137页
https://stackoverflow.com/questions/42172880
复制相似问题