iCloud NSPersistentStoreDidImportUbiquitousContentChangesNotification вызывается только сразу после запуска приложения

Мое приложение использует основную базу данных данных, содержащуюся внутри UIManagedDocument. Когда я пытаюсь выполнить синхронизацию через iCloud, данные редко обновляются. Я включил журналы вездесущности, добавив в свою схему следующий аргумент приложения.

-com.apple.coredata.ubiquity.logLevel 3

Выходные данные журнала аргументов показывают, что целевое устройство распознает изменения вскоре после того, как они были сделаны на исходном устройстве, однако уведомление NSPersistentStoreDidImportUbiquitousContentChangesNotification не запускается. Иногда уведомление срабатывает спустя значительное время после просмотра обновлений, но обычно это не так.

Однако, когда я повторно запускаю приложение (в любое время после того, как журнал напечатает некоторый текст об изменениях), уведомление NSPersistentStoreDidImportUbiquitousContentChangesNotification срабатывает немедленно, что приводит к обновлению данных.

Примечание. Я подписался на уведомление.

[[NSNotificationCenter defaultCenter]addObserver:self
                                        selector:@selector(updatedFromCloud:)
                                            name: NSPersistentStoreDidImportUbiquitousContentChangesNotification
                                          object:nil];

person mrosales    schedule 03.10.2012    source источник
comment
У меня точно такая же проблема, и я передаю постоянный координатор хранилища в качестве параметра объекта. Вы нашли решение?   -  person User    schedule 29.05.2015


Ответы (1)


Вам нужно установить объект в NSPersistentStoreCoordinator, который вы используете, чтобы уведомление знало, какой объект прослушивать. Вы установили его равным нулю в своем коде.

Пример:

[[NSNotificationCenter defaultCenter]addObserver:self
                                    selector:@selector(updatedFromCloud:)
                                        name: NSPersistentStoreDidImportUbiquitousContentChangesNotification
                                      object:self.persistentStoreCoordinator];

Если вы публикуете наблюдателя в классе, который имеет доступ к NSManagedObjectContext (но не к координатору), вы можете просто извлечь координатора через self.managedObjectContext.persistendStoreCoordinator.

Надеюсь это поможет!

person Jay Versluis    schedule 24.03.2014
comment
У меня та же проблема, и я передаю постоянный координатор хранилища (есть только 1) в качестве параметра объекта. Так что я предполагаю, что это вызвано чем-то другим. Есть идеи? - person User; 29.05.2015