CoreData Public Speichern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CoreData Public Speichern

    Hallo zusammen,

    ich hätte die Frage, wie ich in CloudKit CoreData Public Daten Speichern kann?


    ich nutze immer für Private Speichern folgende Code:

    func saveEinstellungenZeiteinheiten(vId:Int,
    vZeiteinheit:String,
    vLfNr:Int64,
    vStandard:Int64
    ){
    if vId == 0 {
    let newData = EinstellungenZeiteinheit(context: self.context)
    newData.id = nextIDEinstellungenZeiteinheiten()
    newData.zeiteinheit = vZeiteinheit
    newData.lfnr = vLfNr
    newData.standard = vStandard
    do {try self.context.save()} catch {}
    } else {
    do {let dataf = try context.fetch(EinstellungenZeiteinheit.fetchRequest())
    let data = dataf.filter({$0.id == vId})
    data[0].zeiteinheit = vZeiteinheit
    data[0].lfnr = vLfNr
    data[0].standard = vStandard
    } catch {}
    do {try self.context.save()} catch {}
    }
    }

    Vielen Dank für eure Unterstützung!

    Gruß
    Zoli
  • Hallo Zoli,

    ich gehe davon aus, dass du aktuell den NSPersistentCloudKitContainer zur Synchronisation von CoreData und iCloud nutzt. Der Code-Ausschnitt von dir ist da eher semi-relevant, da du hier lediglich ein neues Entity-Object in der Datenbank anlegst, aber nicht zeigst, wie der Container konfiguriert wurde. Der NSPersistentCloudKitContainer ist by default auf privat gesetzt, d.h. er synchronisiert die lokalen CoreData mit der privaten iCloud des Nutzers.
    Die Synchronisation mit der Public Database ist seit letztem Jahr auch mit dem NSPersistentCloudKitContainer möglich. Dazu musst du den databaseScope der cloudKitContainerOptions auf .public setzen. Ich empfehle dir folgende WWDC-Session: developer.apple.com/videos/play/wwdc2020/10650/

    VG
  • Ja, absolute Zustimmung @MyMattes! Der NSPersistentCloudKitContainer ist meiner Meinung nach ganz großes Kino, weil er einfach unglaublich viel Arbeit abnimmt. Und jeder, der schon mal versucht hat, manuell Core Data und iCloud zu syncen (inkl. CloudKit-Ref-Limits, Conflict-Handling, etc. etc.) weiß wovon ich spreche...

    Eine weitere Neuerung neben dem Public DB-Support, die für mich persönlich sogar noch viel wichtiger ist, ist der Support von Shared Zones. Damit kann man endlich auch mit dem NSPersistentCloudKitContainer Daten mit anderen Nutzern teilen - das war davor nur sehr sehr umständlich und "hacky" möglich, vor allem deshalb, weil der NSPersistentCloudKitContainer keine "nativen" CloudKit-References erstellt (solche nativen Parent-References waren aber erforderlich, um mehrere Documents wie z.B. ein Foto-Album zu teilen). Als ich auf der WWDC erfahren hab, dass hier nun nachgebessert wurde und ganze Zones geshared werden können und dies auch mit dem NSPersistentCloudKitContainer, da habe ich lauthals "YES!!!" gerufen. :D

    Ich arbeite gerade an einer App für den Store, die diese Technik nutzen soll. Bei Interesse kann ich da gerne noch einmal einen detaillierteren Erfahrungsbericht geben.

    VG
  • Osxer schrieb:


    Bei Interesse kann ich da gerne noch einmal einen detaillierteren Erfahrungsbericht geben.
    Sehr gerne! Ich hatte mich auch schon länger mit Plänen einer Core-Data-App mit iCloud-Sync beschäftigt, und war vom NSPersistentCloudKitContainer begeistert ... die Aussicht auf eine eigene Implementierung hatte mich abgeschreckt. Vor >1 Jahr ging die App in den Store, natürlich nur mit privatem Container. Aber ich hatte diese Einschränkung registriert und das Update "verpennt".

    Jetzt müsste es nur noch eine vernünftige Analyse- bzw. Reset-Methode bei Sync-Problemen geben ... oder ist da auch etwas an mir vorbeigegangen :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Jetzt müsste es nur noch eine vernünftige Analyse- bzw. Reset-Methode bei Sync-Problemen geben ... oder ist da auch etwas an mir vorbeigegangen
    Klassische Sync-Probleme (z.B. keine Internet-Verbindung, unterschiedliche States) werden automatisch im Hintergrund gelöst bzw. können mittels der Merge Policy konfiguriert werden. Bei "Custom-Konflikten" beim Synchen ist leider - soweit ich weiß - aktuell noch Handarbeit angesagt... ;) Aber ich bleibe optimistisch, dass Apple hier weiter tüftelt und bin schon auf die nächste WWDC gespannt.