Я пытался найти лучшее решение для сохранения данных для приложения, над которым я работаю, и решил, что локально сохраненный файл JSON будет лучшим балансом между простотой и функциональностью.
Что мне нужно сохранить, так это массив пользовательских структур, и я могу написать его очень хорошо, используя приведенный ниже код, но я не могу декодировать его обратно, я получаю эту ошибку:
Невозможно вызвать «декодирование» со списком аргументов типа «([Идея], из: данных)»
Любая идея, что вызывает это? Должен ли сам массив идей быть кодируемым? Тогда кодирование не должно было сработать, верно? Я делаю что-то еще не так?
Мы ценим любые предложения.
var ideas = [Idea]()
--
struct Idea: Codable {
var title: String
var description: String?
var date: String
var completed: Bool
}
--
func writeIdeasToJSON(){
let pathDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
try? FileManager().createDirectory(at: pathDirectory, withIntermediateDirectories: true)
let filePath = pathDirectory.appendingPathComponent("data.json")
let json = try? JSONEncoder().encode(ideas)
do {
try json!.write(to: filePath)
} catch {
print("Failed to write JSON data: \(error.localizedDescription)")
}
}
--
func readIdeasFromJSON(){
do {
let path = Bundle.main.path(forResource: "data", ofType: "json")
let jsonData = try Data(contentsOf: URL(fileURLWithPath: path!))
do {
let readIdeas = try JSONDecoder().decode(ideas.self, from: jsonData)
print(readIdeas)
} catch let error{
print(error.localizedDescription)
}
} catch let error {
print(error.localizedDescription)
}
}
[Idea].self
вместоideas.self
. - person rmaddy   schedule 04.07.2019jsonData
равно нулю, потому что вашего файла на самом деле нет в пакете ресурсов вашего приложения. Это имеет смысл, потому что вы записали файл в папку «Документы». Два совершенно разных места. - person rmaddy   schedule 04.07.2019