iOS - RestKit并清除所有数据?

时间:2011-08-26 16:56:32

标签: iphone objective-c ios restkit

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

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

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:4)

使用RKManagedObjectStore类中的以下方法。

- (void)deletePersistantStoreUsingSeedDatabaseName:(NSString *)seedFile

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

答案 2 :(得分:2)

在Restkit 0.20中 试试这个:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

为我工作=)

答案 3 :(得分: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];
}