См. iOS Рекомендации по хранению видео и Основы файловой системы . Это должно помочь вам.
Короче говоря, данные приложения обычно хранятся в «каталоге поддержки приложений», документы, предоставляемые пользователю (например, приложение «Файлы»), хранятся в папке «документы», загрузки могут быть легко восстанавливаемые данные хранятся в папке «caches». Технически вы можете использовать UserDefaults
для хранения данных приложения такого рода, но на самом деле это не предназначено для этой цели.
Повторное открытие файла для «чтения / записи», когда имея дело с JSON, вы обычно этого не делаете. Вы читаете файл в Data
и десериализуете JSON в объекты вашей модели.
do {
let fileURL = try FileManager.default
.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
.appendingPathComponent("appdata.json")
let data = try Data(contentsOf: fileURL)
let appData = try JSONDecoder().decode(AppData.self, from: data)
// do something with appData
} catch {
print(error)
}
Когда вы хотите обновить, вы сериализуете объекты модели в Data
, содержащий ваш JSON, а затем записываете его в файл, заменяя файл.
do {
let fileURL = try FileManager.default
.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
.appendingPathComponent("appdata.json")
let data = try JSONEncoder().encode(appData)
try data.write(to: fileURL)
} catch {
print(error)
}
Очевидно, это предполагает, что тип AppData
(или как вы его называете) соответствует Codable
, но вы сказали, что знакомы с сериализацией JSON. См. Кодирование и декодирование пользовательских типов для получения дополнительной информации.