2017-10-25 2 views
0

Mein Plan ist, Ensembles 2 zu kaufen (um Geschwindigkeit/Effizienz usw. zu nutzen), aber ich versuche sicherzustellen, dass ich es zum Funktionieren bringen kann (in einem Test-Swift-Projekt) zuerst. Dazu experimentiere ich mit V1.iCloud-Synchronisierung von Core-Daten mit Ensembles

Mit Simple Sync with Swift als Leitfaden habe ich Ensembles in mein xcode-Projekt integriert.

Die Daten aus der App scheinen in iCloud gespeichert zu werden. Wenn ich die App lösche und sie dann erneut hinzufüge, werden durch Leeching und anschließende Synchronisierung die korrekten Daten von iCloud wiederhergestellt. Mein Problem ist, dass das Testen mit einem zweiten Gerät (das in demselben Apple/iCloud-Konto angemeldet ist) dasselbe mit seinen eigenen Daten macht. Die Daten von den 2 Geräten werden niemals zusammengeführt. Die auf den einzelnen Geräten erstellten Daten werden jedoch nach dem erneuten Laden der App auf dem eigenen Gerät wiederhergestellt.

Weiß jemand, wie das sein könnte?

Ich frage mich, ob das Problem die Speicher-URL sein könnte, die ich erzeuge. Viele der Core Data Stack-Einstellungen werden nun automatisch in Swift 3+ (NSPersistentContainer) vorgenommen, sodass diese Dinge nicht vom Benutzer generiert werden müssen. Hier ist, wie ich die Variablen am Erzeugung für den Shop-URL und Modell URL zu verwenden, wenn mein Ensemble einrichten:

var storeDirectoryURL: URL { 
     return try! FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
    } 

var storeURL: URL { 

     return storeDirectoryURL.appendingPathComponent("VsSyncTest.sqlite") 
    } 

    // Setup Ensemble 

let modelURL = Bundle.main.url(forResource: "VsSyncTest", withExtension: "momd") 

Antwort

0

Der einzige Weg, kann ich mir vorstellen, dass passieren würde, wenn Sie entweder unterschiedliche iCloud-Konten verwenden, oder Sie haben für jedes Gerät eine andere Ensemble-Kennung.

Beachten Sie auch, dass das Teilen von iCloud-Dokumenten stur sein kann. Nur weil die Dateien lokal zum Container hinzugefügt werden, heißt das nicht, dass sie sofort auf das andere Gerät übertragen werden. (CloudKit Backend ist in dieser Hinsicht viel besser, aber nur in E2.)

Wenn Sie mit dem Simulator testen, kann die Verwendung von Debug > iCloud > Trigger Sync in Simulator helfen.

+0

Dank Drew. Der iCloud-Account ist auf jeden Fall derselbe (habe sich jeweils wieder an- und abgemeldet). Genauso wie der Bezeichner des Ensembles (von beiden Geräten gelöscht und von xcode neu geladen). Das Erzwingen einer Synchronisierung im Simulator hat ebenfalls nicht geholfen. Gibt es noch etwas, was ich tun könnte? Gibt es eine Möglichkeit zu sehen, was auf iCloud gespeichert ist, da dies eine Vorstellung davon geben könnte, was vor sich geht? – mallowman

+0

Meine beste Vermutung ist, dass Sie die 'merge ...' Methode einfach nicht aufrufen. Solange Sie 'merge ...' nicht aufrufen, werden keine Cloud-Daten eingefügt. Fügen Sie dazu eine Schaltfläche oder einen Timer hinzu (Benachrichtigungen funktionieren, aber nicht zuverlässig). Um den Inhalt des Containers zu überprüfen, gehen Sie zu '~/Library/Mobile Documents/iCloud ~ '. Suchen Sie auf einem Mac in Ihrem Benutzerordner und im Simulator den Benutzerordner und gehen Sie von dort aus. –

+0

Explizites Aufrufen der Zusammenführung macht keinen Unterschied. Ich frage mich, ob meine persistentStore: store URL falsch ist und dass auf beiden Geräten ein anderer verwendet wird. Ist das möglich? Die neuesten Versionen von Swift/xcode machen viel von der Einrichtung des Core Data Stack hinter den Kulissen und sind daher nicht sicher, ob ich die richtige URL ziehe. Bearbeite Frage mit Code .... – mallowman

Verwandte Themen