2011-08-26 3 views
10

J'utilise RestKit pour les appels webservice, la mise en cache et les etags. J'ai implémenté mon propre modèle Coredata et managedObjectsiOS - RestKit et effacement de toutes les données?

Dès que l'utilisateur se déconnecte, je dois effacer toutes les données de la base de données. J'ai réussi à supprimer le fichier sqlite et à le recréer, mais je n'arrive pas à trouver un moyen d'effacer toutes les données d'accrochage et d'etag de RestKit. Comment effacer complètement toutes les données stockées par RestKit?

Répondre

14

Vous voulez appeler [[RKClient sharedClient].requestCache invalidateAll]; pour essuyer le cache propre. Vous pouvez voir le API docs.

+8

à partir de RestKit 0.20 vous aurez besoin d'utiliser '[[RKManagedObjectStore defaultStore] resetPersistentStores: nil];' –

+0

A travaillé pour moi en utilisant RestKit 0.20 http://stackoverflow.com/a/18425303/1318202 –

+0

Salut @ blake-watts comment faire cela dans la version 0.20 –

4

Utilisez la méthode suivante de la classe RKManagedObjectStore.

- (void)deletePersistantStoreUsingSeedDatabaseName:(NSString *)seedFile

http://restkit.org/api/0.9/Classes/RKManagedObjectStore.html#//api/name/deletePersistantStoreUsingSeedDatabaseName:

+0

Quel serait mon fichier de départ? J'ai mon propre modèle de données de base et le contexte, je n'utilise pas le kit de repos pour cela – aryaxt

+1

Dans ce cas, votre question a été répondue ici: http://stackoverflow.com/questions/1077810/delete-reset-all-entries-in- core-data –

+0

Je ne pense pas qu'ils stockent le cache et etags dans le même fichier sqlite. Actuellement, je supprime mon sqlite et le recréer et quand j'appelle le webservice, RestKit retourne les données précédentes en cache, donc je retrouve mes anciennes données. – aryaxt

2

En Restkit 0,20 essayez ceci:

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

a fonctionné pour moi =)

0

Dans RestKit 0.20.2 l'exemple suivant fait l'affaire. Son code off basé dans le composant RestKit/Testing dans le fichier RKTestFactory.m et a fonctionné très bien dans mon projet.

En outre, si RestKit gère votre pile CoreData, ce qui est la mienne, n'oubliez pas de supprimer tout NSFetchedResultsController qui utilise NSManagedObjectContext dans votre configuration RestKit.

- (void)tearDownRestKit 
{ 
    // Cancel any network operations and clear the cache 
    [[RKObjectManager sharedManager].operationQueue cancelAllOperations]; 
    [[NSURLCache sharedURLCache] removeAllCachedResponses]; 

    // Cancel any object mapping in the response mapping queue 
    [[RKObjectRequestOperation responseMappingQueue] cancelAllOperations]; 

    // Ensure the existing defaultStore is shut down 
    [[NSNotificationCenter defaultCenter] removeObserver:[RKManagedObjectStore defaultStore]]; 

    // Not be needed if not using indexer 
    if ([[RKManagedObjectStore defaultStore] respondsToSelector:@selector(stopIndexingPersistentStoreManagedObjectContext)]) { 
     // Search component is optional 
     [[RKManagedObjectStore defaultStore] performSelector:@selector(stopIndexingPersistentStoreManagedObjectContext)]; 

     if ([[RKManagedObjectStore defaultStore] respondsToSelector:@selector(searchIndexer)]) { 
      id searchIndexer = [[RKManagedObjectStore defaultStore] valueForKey:@"searchIndexer"]; 
      [searchIndexer performSelector:@selector(cancelAllIndexingOperations)]; 
     } 
    } 

    [RKObjectManager setSharedManager:nil]; 
    [RKManagedObjectStore setDefaultStore:nil]; 
}