Domanda

Utilizzo iCloud nelle mie app ormai da un po' e recentemente sto riscontrando un problema per cui i dispositivi si rifiutano di comunicare tra loro.O almeno questo è quello che pensavo finché non ho iniziato a registrare i metodi in cui avviene la fusione.Mio persistentStoreCoordinator è impostato come descritto in a la mia domanda precedente.

Il problema è il seguente.Quando configuro il mio managedObjectContext, aggiungo un osservatore per visualizzare la notifica NSPersistentStoreDidImportUbiquitousContentChangesNotification come segue:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];

Dove coordinator è impostato come NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator].

I miei metodi iCloud sono i seguenti:

- (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];
    }];
}

Quindi ora abbiamo il problema vero e proprio

Inizialmente la sincronizzazione è avvenuta senza problemi.I dati di un dispositivo sono stati modificati, quindi la modifica è stata visualizzata sull'altro dispositivo.Ma adesso, niente.La parte curiosa è in quei registri che vedi mergeiCloudChanges:forContext:.La fusione avviene effettivamente.Lo vedo innescato.Ma il insert, delete, E update parti della nota di unione sono SEMPRE prive di contenuto.Quindi l'unione avviene, ma senza dati.Per quanto mi riguarda, non riesco a capire perché ciò accada o come sincronizzarlo nuovamente correttamente.Qualsiasi aiuto sarebbe più che apprezzato.

Nota:Sto anche usando il NSUbiquitousKeyValueStoreDidChangeExternallyNotification notifica per il mio NSUbiquitousKeyValueStore (che utilizzo per sincronizzare il file NSUserDefault valori-chiave) e tali notifiche vengono trasferite e aggiornate senza alcun intoppo, il che mi confonde ancora di più sul motivo per cui persistentStoreCoordinator le notifiche sono vuote.

Spero davvero che qualcuno lo abbia visto/sperimentato prima perché dopo aver esaurito per due settimane ogni strada a cui riesco a pensare per trovare e risolvere il problema da solo, sento di essere ora a un punto morto.

È stato utile?

Soluzione

Ho capito questo.Fondamentalmente, i registri delle transazioni sembravano danneggiati o smarriti.Ho rielaborato un modo per risincronizzare i dispositivi e pubblicherò immediatamente i risultati su una mia domanda precedente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top