Я уже давно использую iCloud в своих приложениях, и недавно у меня возникла проблема, когда устройства отказываются общаться друг с другом.Или, по крайней мере, так я думал, пока не начал регистрировать методы, где происходит слияние.Мой persistentStoreCoordinator
настроен так, как описано в моем предыдущем вопросе .
Проблема заключается в следующем.При настройке моего managedObjectContext
я добавляю к нему наблюдателя для просмотра уведомления NSPersistentStoreDidImportUbiquitousContentChangesNotification следующим образом:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];
, где coordinator
- это NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]
.
Мои методы iCloud следующие:
- (void)mergeiCloudChanges:(NSNotification *)note forContext:(NSManagedObjectContext *)moc {
NSLog(@"insert %@", [[note userInfo] valueForKey:@"inserted"]);
NSLog(@"delete %@", [[note userInfo] valueForKey:@"deleted"]);
NSLog(@"update %@", [[note userInfo] valueForKey:@"updated"]);
[moc mergeChangesFromContextDidSaveNotification:note];
NSNotification *refreshNotification = [NSNotification notificationWithName:@"RefreshAllViews" object:self userInfo:[note userInfo]];
[[NSNotificationCenter defaultCenter] postNotification:refreshNotification];
}
- (void)mergeChangesFrom_iCloud:(NSNotification *)notification {
NSLog(@"merging changes");
NSManagedObjectContext *moc = [self managedObjectContext];
[moc performBlock:^{
[self mergeiCloudChanges:notification forContext:moc];
}];
}
Итак, теперь у нас есть актуальная проблема
Сначала синхронизация прошла без нареканий.Данные с одного устройства были изменены, затем это изменение появилось на другом устройстве.Но сейчас ничего.Любопытная часть находится в тех журналах, которые вы видите в mergeiCloudChanges:forContext:
.Слияние фактически происходит.Я вижу это срабатывает.Но части insert
, delete
и update
примечания о слиянии ВСЕГДА без содержимого.Таким образом, происходит слияние, но без данных.Что касается жизни, я не могу понять, почему это так или как заставить его снова правильно синхронизироваться.Любая помощь будет более чем признательна.
Примечание: я также использую уведомление NSUbiquitousKeyValueStoreDidChangeExternallyNotification
для своего NSUbiquitousKeyValueStore
(которое я использую для синхронизации значений ключа NSUserDefault
), и эти уведомления передаются пои обновление без каких-либо отклонений, что еще больше смущает меня, почему уведомления persistentStoreCoordinator
являются пустыми.
Я действительно надеюсь, что кто-то видел / испытывал это раньше, потому что после двух недель, исчерпывающих все возможности, я могу думатьчтобы найти и исправить это самостоятельно, я чувствую, что сейчас нахожусь в тупике.