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

В моем сценарии я storing массив данных в UserDefault в VC2. В другом VC1 я retrieving данных. Теперь мне нужно загрузить данные в массив collectionview в VC1. Здесь я использую несколько источников данных. Вместо этого я хочу использовать один источник данных, чтобы получить конкретные значения для загрузки в коллекцию. Как этого добиться?

ПРИМЕЧАНИЕ: при отклонении VC2 мне нужно передать значение массива в VC1

Хранение данных массива в UserDefault в VC2

let selectedData = membersData.filter{$0.isSelected}
UserDefaults.standard.set(try? PropertyListEncoder().encode(selectedData), forKey:"sessiondata")

Восстановление сохраненных данных в VC1

    func storeValidaion(){
         // Retrive Array Values
          if let data = UserDefaults.standard.value(forKey:"sessiondata") as? Data {
               let sessionData = try? PropertyListDecoder().decode(Array<TeamListData>.self, from: data)
               print("ARRAY VALUES: \(sessionData!)")

          // here how to load array data into collection view

   if sessionData?.isEmpty == false {
            for person in sessionData! {
                print(person.userid!)

                if useridArray.contains(person.userid!) {
                    print("yes")
                } else {
                    self.useridArray.append(person.userid!)
                    self.nameArray.append(person.firstname!)
                    self.profileArray.append(person.profileimage!)
                    print(useridArray)
                    print(profileArray)
                }
                self.collectionView.reloadData()
            }
        } else {
            UserDefaults.standard.removeObject(forKey:"sessiondata")
            self.useridArray.removeAll()
            self.profileArray.removeAll()
            self.nameArray.removeAll()
            self.collectionView.reloadData()
        }
    }
    }

/*ARRAY VALUES: [ListData(userid: Optional("1"), firstname: Optional("abc"), designation: Optional("student"), profileimage: Optional("url"), isSelected: false), ListData(userid: Optional("2"), firstname: Optional("def"), designation: Optional("Executive"), profileimage: Optional("url"), isSelected: false)]*/

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Ниже кода внутри VC2

Хранение массива данных в UserDefault в VC2

let selectedData = membersData.filter{$0.isSelected}
UserDefaults.standard.set(try? PropertyListEncoder().encode(selectedData), forKey:"sessiondata")

принятие VC2Delegate

func dismissProtocole(data: Any) {
        <#code#>
    }

ПрисутствуетVC2 внутри VC1

if let details = self.storyboard?.instantiateViewController(withIdentifier: "VC2") as?VC2 {
            details.modalPresentationStyle = .fullScreen
             details.modalTransitionStyle = .crossDissolve
            **details.selectedData = selectedData** // pass data
             details.delegate = self
            self.navigationController?.present(details, animated: true, completion: nil)
        }

Внутри VC2

var selectedData: [TeamListData]? // метод экземпляра var делегат: VC2Delegate?

извлечение сохраненных данных в VC2

func storeValidaion(){
        // Retrive Array Values
        if selectedData == nil  {
            if let data = UserDefaults.standard.value(forKey:"sessiondata") as? Data {
                guard let sessionData = try? PropertyListDecoder().decode(Array<TeamListData>.self, from: data) else {
                    return
                }

                print("ARRAY VALUES: \(sessionData)")
                self.selectedData = sessionData
                self.collectionView.reloadData()
                // put your code whatever you want....
            }
        }

    }

метод исключения

func dismiss() {
    self.delegate?.dismissProtocole(data: sessionData)
}

Протокол декларации

protocol VC2Delegate {
    func dismissProtocole( data : Any)
}
0 голосов
/ 06 ноября 2019

Сохранение данных в архиве и выборка данных в Unarchive в UserDefaults

 func saveCustomData() throws {
    let array = ["New","Old"]
    let encodedData = try NSKeyedArchiver.archivedData(withRootObject: array, requiringSecureCoding: false)
    UserDefaults.standard.set(encodedData, forKey: "data")
}

func retrieveData() throws {
    if let data = UserDefaults.standard.data(forKey: "data"),
        let dataArr = try  NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? [String] {
    } else {
        print("There is an issue")
        self.saveCustomData()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...