Reputation: 41
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!
Upvotes: 2
Views: 1473
Reputation: 91
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)
}
}
Upvotes: 0
Reputation: 349
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
......
}
}
Upvotes: 1