Problème de persistance / performance du kit de repos avec les MOC Multiplie

C'est la première fois que j'utilise la nouvelle version de RestKit et plusieurs MOC. Im en utilisant RestKit 0.20-pre5 et j'ajoute des objects gérés via les opérations RestKit ainsi que manuellement dans toute l'application.

RestKits fournit deux MOC pour gérer les performances: les contexts MainQueue et PersistantStore Object. A partir de l'inspection du code RestKits, tous les nouveaux objects gérés sont sauvegardés dans le MOC mainQueue (basé sur la ligne RKObjectManager 433 et inspection de diverses adresses de pointeur). Les objects créés par RestKit sont bien conservés (après avoir appelé une sauvegarde bien sûr) cependant chaque fois que je crée mes propres ManagedObjects dans le même MOC mainQueue et que je les sauvegarde, ils ne persistent pas lorsque je relance l'application. (Je sauve le MOC assez souvent)

C'est là que le magasin persistant entre en jeu. Chaque fois que j'enregistre le magasin persistant avec le MOC MainQueue, datatables persistent. J'imagine que cela a quelque chose à voir avec le RKManagedObjectStore fusionnant les changements à chaque fois que j'appelle save sur le persistantStoreMOC (via une notification) Alors … tout va bien?

Le problème est que chaque fois que je sauvegarde les deux contexts, il y a un décalage notable qui dure au less 1 seconde (il peut varier jusqu'à 3!). Ce décalage semble augmenter le plus NSManagedObjects que je crée. J'ai exécuté des instruments et il n'y a aucun problème de memory. Je dois utiliser de manière incorrecte l'implémentation RestKits des données de base.

Pour l'logging, je sauvegarde en utilisant la méthode suivante:

- (void)saveContext { __block BOOL _blockSuccess; __block NSError *_blockError; NSManagedObjectContext *persistantContext = [[[RKObjectManager sharedManager] managedObjectStore] persistentStoreManagedObjectContext]; [globalManagedObjectContext performBlockAndWait:^{ _blockSuccess = [globalManagedObjectContext save:&_blockError]; }]; if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError); [persistantContext performBlock:^{ _blockSuccess = [persistantContext save:&_blockError]; if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError); }]; } 

Ceci est appelé à partir d'un object singleton chaque fois que nous voulons save l'état de l'application. (globalManagedObjectContext est simplement une macro pointant vers RestKits mainQueueObjectContext). La suppression de l'logging persistantContext supprime le décalage mais, bien sûr, ne conserve pas datatables.

Anyones aider (en particulier Blake Watters;) serait grandement appréciée!

À votre santé,

Aron

Je crois que la réponse est d'utiliser la méthode saveToPersistentStore: ajoutée par la catégorie RKAdditions à NSManagedObjectContext.

Ceci est pris d' ici et ici .

Avez-vous encore des problèmes lors de l'utilisation?