10

我正在使用 RestKit 进行 Web 服务调用、缓存和 etags。我实现了自己的 coredata 模型和 managedObjects

用户退出后,我需要清除数据库中的所有数据。我能够成功删除 sqlite 文件并重新创建它,但我找不到清除所有 RestKit 捕获和 etag 数据的方法。如何完全擦除 RestKit 存储的所有数据?

4

4 回答 4

14

您想调用[[RKClient sharedClient].requestCache invalidateAll];以清除缓存。您可以查看API 文档

于 2011-08-29T12:29:48.817 回答
4

使用 RKManagedObjectStore 类中的以下方法。

- (void)deletePersistantStoreUsingSeedDatabaseName:(NSString *)seedFile

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

于 2011-08-26T20:40:47.497 回答
2

在 Restkit 0.20 中试试这个:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

为我工作=)

于 2013-08-25T03:14:45.640 回答
1

在 RestKit 0.20.2 中,以下示例可以解决问题。它基于文件 RKTestFactory.m 中的 RestKit/Testing 组件中的代码,并且在我的项目中运行良好。

此外,如果 RestKit 正在管理您的 CoreData 堆栈,这就是我的设置方式,请记住删除任何在 RestKit 设置中使用 NSManagedObjectContext 的 NSFetchedResultsController。

- (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];
}
于 2014-04-11T18:05:25.627 回答