我正在使用 RestKit 进行 Web 服务调用、缓存和 etags。我实现了自己的 coredata 模型和 managedObjects
用户退出后,我需要清除数据库中的所有数据。我能够成功删除 sqlite 文件并重新创建它,但我找不到清除所有 RestKit 捕获和 etag 数据的方法。如何完全擦除 RestKit 存储的所有数据?
我正在使用 RestKit 进行 Web 服务调用、缓存和 etags。我实现了自己的 coredata 模型和 managedObjects
用户退出后,我需要清除数据库中的所有数据。我能够成功删除 sqlite 文件并重新创建它,但我找不到清除所有 RestKit 捕获和 etag 数据的方法。如何完全擦除 RestKit 存储的所有数据?
您想调用[[RKClient sharedClient].requestCache invalidateAll];
以清除缓存。您可以查看API 文档。
使用 RKManagedObjectStore 类中的以下方法。
- (void)deletePersistantStoreUsingSeedDatabaseName:(NSString *)seedFile
在 Restkit 0.20 中试试这个:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
为我工作=)
在 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];
}