SwiftUI CoreData nillError ObservableObject - PullRequest
1 голос
/ 16 апреля 2020

У меня проблема с разработкой приложения. Дело в том, что когда я ввожу определенный код, файл 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()
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...