Swift хранит и извлекает данные массива, используя UserDefault - PullRequest
0 голосов
/ 06 ноября 2019

В моем сценарии мне нужно сохранить array значения в UserDefault и извлечь те же данные. Полученные данные необходимо загрузить в тот же массив, когда пользователь снова откроет этот конкретный viewcontroller. Ниже код, который я пытаюсь выполнить. Я не знаю, как store и retrieve ниже значений вывода массива в UserDefaults надлежащим образом. Пожалуйста, помогите мне с этим.

Хранить данные в массиве

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.tableView.deselectRow(at: indexPath, animated: true)
        let item = searching ? filteredData[indexPath.row] : membersData[indexPath.row]

        if let cell = tableView.cellForRow(at: indexPath) {
            if cell.accessoryType == .checkmark {
                cell.accessoryType = .none

                // UnCheckmark cell JSON data Remove from array
                self.selectedRows = selectedRows.filter{$0 != indexPath.row}
                self.selectedValues.remove(item) // Here Data Removing Into Array

            } else {
                cell.accessoryType = .checkmark

                // Checkmark selected data Insert into array
                self.selectedRows.append(indexPath.row) //select
                self.selectedValues.insert(item) // Here Data Storing Into Array
            }
        }        
    }

Сохранить данные массива в UserDefault

@IBAction func doneAction(_ sender: Any) {

        // Selected Row Index Store
        UserDefaults.standard.set(selectedRows, forKey: "SelectedIndexes")
        // Here need to store Selected values
        self.dismiss(animated: true, completion: nil)
    }

Обновить UserDefault Сохраненные данные в том же массиве (viewDidLoad)

    self.selectedRows = UserDefaults.standard.value(forKey: "SelectedIndexes") as? [Int] ?? []
// Here how to retrieve SelectionValue and Load into `selectedValues` array

Кодируемый

// MARK: - ListData
struct ListData: Codable, Hashable {
    let userid: String?
    let firstname, designation: String?
    let profileimage: String?
    var isSelected = false

    private enum CodingKeys : String, CodingKey {
        case userid, firstname, designation, profileimage
    }
}

Массив данных

ВЫБРАТЬ ЗНАЧЕНИЕ: [ListData (идентификатор пользователя: необязательный («1»), имя: необязательный («abc»), обозначение: необязательный («английский»), profileimage: необязательный («url»)), ListData (идентификатор пользователя: необязательный («2»), имя: необязательный («def»), обозначение: необязательный («цифровой»), изображение профиля: необязательный («url»))] SELECT ROW: [0, 1]

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Если вы хотите сохранить список в UserDefaults, вы можете только Any список типов данных в UserDefaults. Сначала вы должны сохранить выбранную строку в Any списке типов данных.
Шаг 1: Объявить список как Any тип данных и добавить в него данные выбранной строки.

var selectedValues: [Any]?

Шаг 2: Создайте переменную в отдельном классе, где все ваши UserDefaults сохранят это хранилище Any список типов данных в

//MARK: store selectedValues

private let KeySelectedValues = "KeySelectedIndexes"
fileprivate var _selectedValueList = [Any]()

var selectedValueList : [Any] {
    get {
        _selectedValueList = UserDefaults.standard.object(forKey: KeySelectedIndexes) as? [Any] ?? _selectedValueList
        return _selectedValueList
    }

    set {
        _selectedValueList = newValue
        UserDefaults.standard.set(_selectedValueList, forKey: KeySelectedIndexes)
    }
}

Шаг 3: Сохранитьсписок в UserDefaults, например

classObj.selectedValueList = selectedValues

Шаг 4: Чтобы получить список данных из UserDefaults

let _selectedValueList = classObj.selectedValueList   
guard let selectedValueList:[YourSelectedRowModel] = Mapper<YourSelectedRowModel>().mapArray(JSONArray: _selectedValueList as! [[String : Any]]) else {
     return
}
0 голосов
/ 06 ноября 2019

Если вы хотите сохранить в UserDefault, хотя это не рекомендуется.

var selectedValues: [Any] = [["id": 1, "name": "Adam"]]
selectedValues.append(["id": 2, "name": "Eve"])
UserDefaults.standard.set(selectedValues, forKey: "SelectedValues")
let result = UserDefaults.standard.array(forKey: "SelectedValues") ?? []

print(result)


Output : [{
  id = 1;
  name = Adam;
}, {
  id = 2;
  name = Eve;
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...