Class 如何保存和加载对象数组-Swift 4

Class 如何保存和加载对象数组-Swift 4,class,object,swift4,saving-data,userdefaults,Class,Object,Swift4,Saving Data,Userdefaults,这是我的应用程序“提醒”中的代码: 文件夹类: class Folder { var name: String var labelName: String var imageName : String var colour : ColourTheme var colourArray : Array<UIColor> var maxNumOfPages : Int var text : Array<String>

这是我的应用程序“提醒”中的代码:

文件夹类:

class Folder
{
    var name: String
    var labelName: String
    var imageName : String
    var colour : ColourTheme
    var colourArray : Array<UIColor>
    var maxNumOfPages : Int
    var text : Array<String>
    var touchID : Bool
    var isNewFolder : Bool

init (name: String, labelName: String, imageName: String, colour: ColourTheme, maxNumOfPages: Int, text: Array<Any>, touchID: Bool, isNewFolder: Bool)
{
    self.name = name
    self.labelName = labelName
    self.imageName = imageName
    self.colour = colour
    self.colourArray = []
    self.maxNumOfPages = maxNumOfPages
    self.text = text as! Array<String>
    self.touchID = touchID
    self.isNewFolder = isNewFolder
}
我试图在程序的不同点保存和加载文件夹对象数组。 目前,它给出了以下错误:

NSForwarding:警告:类“提醒.文件夹”的对象0x280e3c600未实现methodSignatureForSelector:--前面有问题 无法识别的选择器-[Reminder.Folder ReplacementObjectForkeyDarchiver:]


我找遍了所有的地方试图解决这个问题请有人帮忙,谢谢

您的文件夹模型类需要继承自NSObject,并采用协议及其所需的方法将数据存储在UserDefaults中

像这样:

class Folder: NSObject {

    var name: String
    var labelName: String
    .....

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

您的文件夹类需要继承自NSObject和NScoding,以及编码器和解码器所需的协议

class Folder: NSObject, NSCoding {
    var name: String
    var labelName: String
    .....
    struct keys {
        static let name = "name"
        static let labelName = "labelName"
    }
    init (name: String, labelName: String .....)
    {
        self.name = name
        self.labelName = labelName
        ......
    }
    required init(coder aDecoder: NSCoder) {
        self.name = aDecoder.decodeObject(forKey: keys.name) as? String ?? ""
        self. labelName = aDecoder.decodeObject(forKey: keys. labelName) as? String ?? ""
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.emailId, forKey: keys.name)
        aCoder.encode(self.userId, forKey: keys.labelName)
    }
}

我该怎么做?只是你的文件夹类继承了NSObject,比如->类文件夹到类文件夹:NSObject
class Folder: NSObject, NSCoding {
    var name: String
    var labelName: String
    .....
    struct keys {
        static let name = "name"
        static let labelName = "labelName"
    }
    init (name: String, labelName: String .....)
    {
        self.name = name
        self.labelName = labelName
        ......
    }
    required init(coder aDecoder: NSCoder) {
        self.name = aDecoder.decodeObject(forKey: keys.name) as? String ?? ""
        self. labelName = aDecoder.decodeObject(forKey: keys. labelName) as? String ?? ""
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.emailId, forKey: keys.name)
        aCoder.encode(self.userId, forKey: keys.labelName)
    }
}