2

Here is my code from my app called Reminders:

Folder Class:

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
}

Main VC:

func resetData ()
{
    folderArray.removeAll()

    let folder1 = Folder.init(name: "reminders", labelName: "reminders", imageName: "reminders(bell)(notifications)", colour: .light, maxNumOfPages: 10, text: [""], touchID: false, isNewFolder: false)

    folderArray.append(folder1)
}

func saveData()
{
    let myData = NSKeyedArchiver.archivedData(withRootObject:   folderArray)
    UserDefaults.standard.set(myData, forKey: "folderArrayD")
    print("place saved")
}

func loadData()
{
    let foldersData = UserDefaults.standard.object(forKey: "folderArrayD") as? NSData

    if let foldersData = foldersData
    {
        let folderArray = NSKeyedUnarchiver.unarchiveObject(with: foldersData as Data) as? [Folder]

        if let folderArray = folderArray
    {
        print(folderArray)
    }
}

I am trying to save and load my folder objects array at different various points in my program. At the moment it is giving this error:

NSForwarding: warning: object 0x280e3c600 of class 'Reminder.Folder' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[Reminder.Folder replacementObjectForKeyedArchiver:]

I have looked everywhere to try fix this please could someone help, thank you!

2 Answers 2

1

Your Folder Model class need Inherits from NSObject and to adopt the protocol and its required methods for store data in UserDefaults.

like this:

class Folder: NSObject {

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

    init (name: String, labelName: String .....)
    {
        self.name = name
        self.labelName = labelName
        ......
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

How do I do this?
just your Folder class inherits NSObject like -> class Folder to class Folder: NSObject
0

Your Folder class needs to be inherits from NSObject and NScoding and protocol required with encoder an Decoder

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.