Und hier bin ich wieder .....
Ich speichere meine Daten direkt in der Cloud mit CloudKit. Speichern, Abrufen, Löschen etc. aus einer View heraus alles toll.
Nun möchte ich ein Array einlesen und direkt Zeile für Zeile in der Cloud speichern:
Von diesen Zeilen habe ich hunderte .....
Das Einlesen und Speichern funktioniert alles
Nun möchte ich jedoch, dass vor dem Speichern eines Datensatzes z.B. der Monat überprüft werden soll, es es diesen schon in der DB gibt:
Alles anzeigen
Auch das funktioniert alles ohne Probleme.
Nun aber !!!!!!!
Wenn ich das Array einlesen und nacheinander abarbeite, dann das das alles so schnell, dass das fetch in Zeile 7 des ersten Codes noch gar nicht den neuen Eintrag in der DB lesen kann, weil dieser (wahrscheinlich) noch nicht weggeschrieben ist. Ich möchte das fetch erst ausführen, wenn das vorherige "CKContainer.default().publicCloudDatabase.save(record)" erfolgreich in der Datenbank gespeichert wurde und über ein fetch abgerufen werden könnte.
Ich habe das was mit async etc gelesen, finde jedoch keine Lösung, wie und wo ich es bei mir in der saveItem Funktion nutzen kann.
Hat da mal jemand wieder einen Tip/Hinweis für mich?
Ich speichere meine Daten direkt in der Cloud mit CloudKit. Speichern, Abrufen, Löschen etc. aus einer View heraus alles toll.
Quellcode
- func saveItem(record: CKRecord, recordTypeString: String, sortKey: String = "name") {
- print("func saveItem '\(recordTypeString)', record '\(record)'")
- CKContainer.default().publicCloudDatabase.save(record) { [weak self] returnedRecord, returnedError in
- // DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
- DispatchQueue.main.async {
- self?.fetchItems(recordTypeString: recordTypeString, sortKey: sortKey)
- }
- }
- }
Nun möchte ich ein Array einlesen und direkt Zeile für Zeile in der Cloud speichern:
Das Einlesen und Speichern funktioniert alles
Nun möchte ich jedoch, dass vor dem Speichern eines Datensatzes z.B. der Monat überprüft werden soll, es es diesen schon in der DB gibt:
Quellcode
- var uuidMonth = UUID().uuidString
- if (!vmCKDb.months.contains{ $0.name.lowercased() == "\(customerItemField[4].lowercased())" }) {
- // recordFields: description, name, order, uuid
- vmCKDb.addButtonPressed(
- recordTypeString: "Months",
- recordFieldValues: ["description month", "\(customerItemField[4])", orderString, "\(uuidMonth)"],
- sortKey: "order"
- )
- } else {
- uuidMonth = (vmCKDb.months.filter{ ($0.name == "\(customerItemField[4])") }.first)!.uuid
- print("month already exists")
- }
Nun aber !!!!!!!
Wenn ich das Array einlesen und nacheinander abarbeite, dann das das alles so schnell, dass das fetch in Zeile 7 des ersten Codes noch gar nicht den neuen Eintrag in der DB lesen kann, weil dieser (wahrscheinlich) noch nicht weggeschrieben ist. Ich möchte das fetch erst ausführen, wenn das vorherige "CKContainer.default().publicCloudDatabase.save(record)" erfolgreich in der Datenbank gespeichert wurde und über ein fetch abgerufen werden könnte.
Ich habe das was mit async etc gelesen, finde jedoch keine Lösung, wie und wo ich es bei mir in der saveItem Funktion nutzen kann.
Hat da mal jemand wieder einen Tip/Hinweis für mich?
... aller Anfang ist schwer ...