У меня проблема с разработкой приложения. Дело в том, что когда я ввожу определенный код, файл JSON начинает загружаться и сохраняется в массиве. Это нормально, проблема в том, что он заканчивает загрузку. Я попытался автоматически сохранить информацию в CoreData, запустив этот код ниже.
var i:Int = 0
while(i < itemsDescargados.count){
let invitacionItems = Invitem(context: self.mangedObjectContext)
invitacionItems.titulo = itemsDescargados[i].titulo
invitacionItems.modo = itemsDescargados[i].modo
invitacionItems.id = itemsDescargados[i].id
invitacionItems.descripcion = itemsDescargados[i].descripcion
invitacionItems.category = itemsDescargados[i].category
invitacionItems.rojo = itemsDescargados[i].rojo
invitacionItems.verde = itemsDescargados[i].verde
invitacionItems.azul = itemsDescargados[i].azul
invitacionItems.imagen = itemsDescargados[i].imagen
do {
try self.mangedObjectContext.save()
print("Downloaded and Saved!")
}
catch{
print("errorCoreData: \(error)")
}
i = i + 1
}
Когда я помещаю этот код в кнопку и сам нажимаю на него, он работает отлично, он сохраняет данные и все в порядке, но проблема в том, что если я запускаю этот код в классе сетевого менеджера class NetworkManagerInv: ObservableObject {
после окончания загрузки, когда приложение запускается try self.mangedObjectContext.save()
автоматически печатает в журнале консоли «errorCoreData: nilError» и ничего не сохраняет.
Я провел много исследований, но не сделал найди что-нибудь полезное, поэтому я надеюсь, что вы, ребята, сможете мне помочь. Заранее спасибо, извините, если я что-то написал с ошибкой Engli sh не является моим основным языком.
Здесь NetworkManagerCode
class NetworkManagerInv: ObservableObject {
@Environment(\.managedObjectContext) var mangedObjectContext
@FetchRequest(fetchRequest: Invitem.getAllItems()) var invitem:FetchedResults<Invitem>
var didChange = PassthroughSubject<NetworkManagerInv, Never>()
var jsoninvItem = [JsoninvItem]() {
didSet {
didChange.send(self)
}
}
init(){
let configuration = URLSessionConfiguration.ephemeral
let session = URLSession(configuration: configuration)
print("Network")
guard let url = URL(string: "http://192.168.1.42:" + codigo + "/items.json") else { return }
session.dataTask(with: url) { (data, _, _) in
guard let data = data else { return }
let items2 = try! JSONDecoder().decode([JsoninvItem].self, from: data)
DispatchQueue.main.async {
self.jsoninvItem = items2
itemsDescargados = items2
if(imgDescargadas.count>0){
//Here i need to put the code, this runs ones it finished
}
}
print("Compleated fetching json items")
}.resume()
}