Как сохранить и загрузить массив объектов - Swift 4 - PullRequest
0 голосов
/ 31 октября 2018

Вот мой код из моего приложения под названием Напоминания:

Папка Класс:

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
}

Главный ВК:

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

Я пытаюсь сохранить и загрузить массив объектов моей папки в разных точках моей программы. На данный момент он дает эту ошибку:

NSForwarding: предупреждение: объект 0x280e3c600 класса 'Reminder.Folder' не реализует methodSignatureForSelector: - проблема впереди Нераспознанный селектор - [Reminder.Folder replaceObjectForKeyedArchiver:]

Я искал повсюду, чтобы попытаться исправить это, может, кто-нибудь поможет, спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Ваш класс Folder должен быть унаследован от 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)
    }
}
0 голосов
/ 31 октября 2018

Вашему классу модели папок необходимо унаследовать от NSObject и принять протокол и его необходимые методы для хранения данных в UserDefaults.

как это:

class Folder: NSObject {

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

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