#ios #swift #nsuserdefaults #arrayobject
#iOS #swift #nsuserdefaults #arrayobject
Вопрос:
Я расшифровал свой Json в structure, и теперь у меня есть массив объектов, каждый из которых имеет некоторые значения, поэтому я хочу, чтобы при выборе пользователем элемента в коллекции просмотр выбранного объекта в массиве добавлял к массиву объектов в UserDefaults Я прочитал похожие вопросы, поэтому я использовал эту функцию ниже, но она не будет работать
@objc func likeOrDislike (_ sender : UIButton!) {
let arrays = UserDefaults.standard.value(forKey: "Liked") as? [ListsModel.ResultValue]
print(arrays as Any)
var items = arrays
let item = self.adv.resultValue[sender.tag]
if arrays != nil {
if items!.contains(where: {($0.id == item.id)}) {
items!.filter({($0.id == item.id)})
} else {
items!.append(item)
}
} else {
items = [item]
}
UserDefaults.standard.setValue(items, forKey: "Liked")
UserDefaults.standard.synchronize()
}
и вот модель, которую я использую для декодирования
public class ListsModel {
struct Response : Decodable {
var resultValue : [ResultValue]
}
struct ResultValue : Decodable {
let id : String?
let title : String?
let user_id : String?
let username : String?
let user_image : String?
let release_date : String?
let start_date : String?
let salary : String?
let salary_id : String?
let work_field_id : String?
let adv_type_id : String?
let work_field : String?
let description : String?
let adv_base_id : String?
let is_spec : String?
let status : String?
let p_expire_date : String?
}
}
Комментарии:
1. Простой ответ: не сохраняйте это в UserDefaults. Скорее используйте FileManager или какую-нибудь базу данных
Ответ №1:
Преобразуйте все объекты модели в строку с помощью stringify, а затем сохраните в user deafaults и используйте там, где вы хотите использовать.
Комментарии:
1. да, это какой-то способ, но я хочу сохранить их все
2. Вы можете добавить их все, что вам нужно, чтобы очистить объект или массив объектов, которые вы получаете из модели. сначала вы создаете модель, затем сохраняете данные в model после завершения преобразуйте все данные модели в stringfy и сохраните в вашем userdefault
3. Нет, вы не должны сохранять пользовательскую модель в
UserDefaults
. Для этого вы должны использоватьFileManager
или базу данных4. Смотрите, как это я использую object mapper для пользовательского класса модели, затем конвертирую в jsonstring и сохраняю в userdefault. //1. пользовательская модель, если пусть userInfo = Mapper<SignInModel>().map(JSONObject: dictionary[«login»]){ если пусть jsonString = Mapper().toJSONString(userInfo, prettyPrint: true) { //2 Информация о пользователе: — пусть encodedData: Data = NSKeyedArchiver.archivedData(с RootObject: jsonString) Пользовательские ошибки.standard.set(encodedData, forKey: «userinfo») } }