Restkit,禁用缓存

时间:2012-02-27 10:13:44

标签: ios restkit

我很难在Restkit框架中尝试禁用缓存。 我试图将缓存策略设置为none,完全没有效果。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:7)

所以,一旦你有了一个客户,要么明确地初始化它:

RKClient *client = [RKClient clientWithBaseURL:url];

或让对象管理员这样做:

RKObjectManager* om = [RKObjectManager managerWithBaseURLString:url];
RKClient *client = om.client;

只需设置缓存策略就可以了:

client.cachePolicy = RKRequestCachePolicyNone;

那是你在做什么?

更新:由于记录消息是唯一让我担心的事情,所以我决定追踪它的来源。 tl; dr版本将忽略该消息并信任日志代理告诉您的内容。

要仔细检查我搜索了"在路径"中使缓存无效并在RKCache invalidateSubDirectory:RKCache invalidateAll两个位置找到它并在它们上设置断点。这是我的一些代码的部分堆栈跟踪:

#0  0x000e6c66 in -[RKCache invalidateSubDirectory:] at RestKit/Code/Support/RKCache.m:189
#1  0x0006b767 in -[RKRequestCache invalidateWithStoragePolicy:] at RestKit/Code/Network/RKRequestCache.m:237
#2  0x0006b958 in -[RKRequestCache setStoragePolicy:] at RestKit/Code/Network/RKRequestCache.m:253
#3  0x00069abf in -[RKRequestCache initWithPath:storagePolicy:] at RestKit/Code/Network/RKRequestCache.m:60
#4  0x000586f3 in -[RKClient baseURLDidChange:] at RestKit/Code/Network/RKClient.m:339
#5  0x000589ce in -[RKClient observeValueForKeyPath:ofObject:change:context:] at RestKit/Code/Network/RKClient.m:373
#6  0x0183cd91 in NSKeyValueNotifyObserver ()
#7  0x0183c895 in NSKeyValueDidChange ()
#8  0x0182233e in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#9  0x01844a82 in _NSSetObjectValueAndNotify ()
#10 0x00057404 in -[RKClient initWithBaseURL:] at RestKit/Code/Network/RKClient.m:176
#11 0x00056df3 in +[RKClient clientWithBaseURL:] at RestKit/Code/Network/RKClient.m:130

我从中学到的是,有两个控制缓存的枚举:

  • RKRequestCachePolicy这是您在客户端上设置的内容,它控制何时查询缓存。
  • RKRequestCacheStoragePolicy确定结果存储在设备上的时间(从不,会话持续时间,永久性)。

作为设置客户端的一部分,当设置URL时,客户端使用RKRequestCacheStoragePolicyPermanently创建新缓存,设置存储策略包括清除先前的会话缓存,如果禁用缓存,则为永久缓存。它清除了您在日志消息中看到的内容。