Обновите сохраненные данные iOS с помощью дополнительных массивов данных с помощью NSCoding - PullRequest
0 голосов
/ 11 марта 2019

У меня есть представление списка, которое собирает некоторые данные, которые пользователь вводит в форму.

Я планирую предоставить пользователю возможность нажать на элемент списка и записать дату, когда он щелкнул по нему.Поэтому я создал версию NSCoding, которая выглядит следующим образом.

class Item: NSObject, NSCoding {

    var uuid: String = NSUUID().uuidString
    var name: String = ""
    var days: [ NSDate ]?

    func encode(with coder: NSCoder) {
        coder.encode(uuid, forKey: "uuid")
        coder.encode(name, forKey: "name")
        coder.encode(days, forKey: "days")
    }

    required init?(coder aDecoder: NSCoder) {

        super.init()

        if let archivedUuid = aDecoder.decodeObject(forKey: "uuid") as? String {
            uuid = archivedUuid
        }

        if let archivedName = aDecoder.decodeObject(forKey: "name") as? String {
            name = archivedName
        }

        if let archivedDays = aDecoder.decodeObject(forKey: "days") as? [ NSDate ] {
            var getDays = archivedDays
        }

    }

    init(name: String, days: [NSDate]) {
        self.days = days
        self.name = name
        super.init()
    }

}

Я хочу получить текущий список дней, который будет массивом, а затем добавить еще одну дату в конец этого массива.Однако я не уверен, как извлечь эти данные и обновить массив, добавив к нему больше.

Я знаю, как заменить данные, но не обновлять их или добавлять к ним больше с помощью NSCoding.Как бы я поступил так?

1 Ответ

0 голосов
/ 17 марта 2019

Для тех, кто интересуется, как это сделать (например, обновить массив, чтобы добавить больше дат) - вам просто нужно сделать это.В моем примере я добавлял больше дат, когда кто-то нажимал на элемент в списке, поэтому я сделал это следующим образом -

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let cell:UITableViewCell = tableGet.cellForRow(at: indexPath as IndexPath) as! UITableViewCell

        let cellID   = cell.tag

        if let filePath = pathForItems() {
            if (NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [Item]) != nil {
                let clickedItem = items[cellID] as? Item

                let days = clickedItem?.days ?? []
                let date = [ Date() ]
                let combinedDays = date + days
                clickedItem?.days = combinedDays
                print(clickedItem?.days)

                NSKeyedArchiver.archiveRootObject(items, toFile: filePath)

            }
        }

    }

По сути разархивировал мои данные с помощью NSKeyedUnarchiver, получил массив из этих данных изатем добавил больше к этому конкретному массиву.Заархивировал все обратно и отправил обратно в хранилище.

Не слишком сложно на самом деле.

...