2016-04-08 9 views
1

Ich habe ein verkabeltes Verhalten mit Core-Daten und iCloud-Synchronisierung. Ich fügte hinzu, die iCloud Dokumente und Wolkenjunge Fähigkeiten meiner app und ich auf diese drei Mitteilungen abonniert:Core-Daten + iCloud-Sync NSPersistentStoreDidImportUbiquitousContentChangesNotification

NSPersistentStoreCoordinatorStoresWillChangeNotification 
NSPersistentStoreCoordinatorStoresDidChangeNotification 
NSPersistentStoreDidImportUbiquitousContentChangesNotification 

Das erste Mal, dass ich die App lief ich diese Benachrichtigungen erhalten:

Using local storage: 1 
store will Change notification 
store did Change notification 
Using local storage: 0 

aber, NSPersistentStoreDidImportUbiquitousContentChangesNotification didn‘ Ich werde gefeuert, weil Core-Daten keine Daten aus dem allgegenwärtigen Container meines iCloud-Accounts heruntergeladen haben.

Allerdings, wenn ich die App verließ und selbst bei aktiviertem Flugmodus neu startete, wurden alle meine Daten sofort geladen. Es schien, dass die Daten beim ersten Start heruntergeladen und im SQLite Store gespeichert wurden, aber die Benachrichtigung wurde nicht ausgelöst, sodass meine Benutzeroberfläche aktualisiert werden konnte.

Haben Sie schon einmal jemanden erlebt und was haben Sie in dieser Situation gemacht?

Antwort

0

Es besteht ein Unterschied zwischen der erstmaligen Einrichtung und den normalen Synchronisierungsvorgängen.

Die NSPersistentStoreDidImportUbiquitousContentChangesNotification wird während der erstmaligen Einrichtung nicht veröffentlicht; nur wenn Änderungen später passieren. Dies benachrichtigt die App, sie zu importieren (durch Aufruf von mergeChangesFromContextDidSaveNotification(_:)).

Apples iCloud Programming Guide for CoreData ist ziemlich hilfreich, um zu verstehen, was in welchem ​​Stadium passiert.

Siehe insbesondere die Kapitel iCloud Performs a One-Time Setup und Core Data Posts Content Changes from iCloud.