В моем приложении я сейчас обрабатываю файл JSON, размещенный на веб-сайте.Я хочу сделать так, чтобы, если пользователь открывает приложение и не имеет подключения к данным, он использовал последние загруженные данные.Я не совсем уверен, как это сделать.
Моя первоначальная мысль состояла в том, чтобы загрузить сам JSON, а затем просто сравнить номера версий при загрузке, загрузить его, если новее, и затем кодировать приложение, чтобы всегда читатьлокальный файл.Тем не менее, я думаю, что я бы предпочел просто посмотреть на веб-сайт, сохранить содержимое JSON локально, а затем при последующих открытиях просто сравнить версию и обновить ее локальные данные, если версия на сайте более новая.
Есть ли какое-либо преимущество одного метода перед другим?
С чего мне начать искать информацию о том, как данные, загружаемые с веб-сайта JSON, хранятся локально и постоянно?Я полагаю, что для этого лучше всего подойдет CoreData, но мой Google-фу не особо разбирается в том, как перенести JSON в Core Data.
РЕДАКТИРОВАТЬ: По предложению Старкси я добавил следующеев мое приложение, но я получаю сообщение об ошибке в строке let jsonData = try ...
.
func saveJSONFile() {
let itemName = "myJSONFromWeb"
let hostedJSONFile = "http://tourofhonor.com/BonusData.json"
do {
let directory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let fileURL = directory.appendingPathComponent(itemName)
// let jsonData = try JSONDecoder().decode(hostedJSONFile.self, from: Data)
let jsonData = try JSONSerialization.jsonObject(with: hostedJSONFile, options: .mutableContainers)
try jsonData.write(to: fileURL, options: .atomic)
//Save the location of your JSON file to UserDefaults
defaults.set(fileURL, forKey: "pathForJSON")
} catch {
print(error)
}
}
Ошибка:
Неоднозначная ссылка на элемент jsonObject участника (с: options:) '
Когда я гуглю это, я вижу другой пост SO, в котором говорится, что я должен использовать JSONDecoder().decode
вместо этого, так как я использую Swift 4, но я не уверен, как преобразовать вышеуказанный кодвместо этого использовать этот метод.