Я создаю приложение, которое позволяет пользователям создавать листы заметок. Для этого я создал UICollectionViewController, и каждый элемент является объектом класса Books. Затем я создаю массив, содержащий все эти книги. Мой вопрос: как я могу запомнить книги с их названием, типом ... в памяти устройства?
Я пытаюсь использовать:
let booksDefault = UserDefaults.standard
if (booksDefault.value(forKey: "booksDefault") != nil) {
books = booksDefault.value(forKey: "booksDefault") as! [Books]
}
let booksDefault = UserDefaults.standard
booksDefault.setValue(books, forKey: "booksDefault")
booksDefault.synchronize()
но это не работает. Спасибо
Спасибо, но знаете ли вы, почему, если я использую этот метод, мой код вылетает?
Ваш код должен работать, только если Books совместим с NSCoding. Если нет, то должно быть сообщение об этом. И я думаю, это должна быть ошибка, не могли бы вы ее показать? Это важная часть вопроса! Не могли бы вы также объяснить, откуда вы знаете, что это не работает, что вы имеете в виду?
Вы пытались сериализовать объекты перед сохранением?
Моя идея состоит в том, чтобы сохранить книги (с его именем), и для этого я создал массив, содержащий книги, созданные пользователем. Я пытался сохранить этот массив, но сбой кода
@PietroPutelli Если код вылетает из строя, в консоли должна быть ошибка. Прочтите, если не понимаете, дайте сюда. Но я уверен, что класс Books несовместим с NSCoding. Прочтите "как сохранить объект в (NS) UserDefaults + NSCoding"
Так что, может быть, в этом смысле более ясно: знаете ли вы, известность приложения? Итак, я санто создал подобное приложение, в котором пользователь мог бы писать, а затем сохранять в памяти устройства эти заметки.
Попробуйте с помощью Codable проверьте этот ответ stackoverflow.com/a/44496937/9315978





Не имеет отношения к вашей проблеме, но важно: вам не нужен
.synchronize(). Это устарело. На самом деле это может даже вызвать лаги, если домен по умолчанию большой. В документации теперь объясняется, что сама система немедленно сохраняет значение без необходимости вручную синхронизировать.