Синхронизация iCloud не отправляет данные через контейнер ubiquity - PullRequest
1 голос
/ 19 февраля 2012

Я уже давно использую 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 являются пустыми.

Я действительно надеюсь, что кто-то видел / испытывал это раньше, потому что после двух недель, исчерпывающих все возможности, я могу думатьчтобы найти и исправить это самостоятельно, я чувствую, что сейчас нахожусь в тупике.

1 Ответ

0 голосов
/ 28 апреля 2012

Я понял это.По сути, журналы транзакций оказались поврежденными или неуместными.Я переработал способ переустановки устройств и немедленно опубликую результаты по моему предыдущему вопросу

...