Restkit,禁用缓存

5

我在尝试禁用Restkit框架的缓存方面遇到了很大的困难。我已经尝试将缓存策略设置为none,但没有任何效果。请问正确的方法是什么?

1个回答

7

因此,一旦您拥有客户端,并进行了明确的初始化:

RKClient *client = [RKClient clientWithBaseURL:url];

或者通过让对象管理器来处理:

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

只需设置缓存策略即可:

client.cachePolicy = RKRequestCachePolicyNone;

你当时是在做什么吗?

更新: 由于日志消息是唯一令人担忧的事情,因此我决定追踪其来源。简而言之,忽略该消息并相信日志代理所告诉你的。

为了进行双重检查,我搜索了"Invalidating cache at path",在这两个位置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创建新缓存。设置存储策略会清除之前的会话缓存,如果禁用缓存,则还会清除永久缓存。您在日志消息中看到的就是这个清除过程。

谢谢您的回复。我刚刚尝试了一下,仍然收到了“restkit.support:RKCache.m:178 Invalidating cache at path:”的消息。 - Gael.D
这是否是唯一表明缓存的迹象?您尝试过使用Charles或其他日志代理程序来查看发送到服务器的内容吗? - drewish
我尝试了代理日志记录,没有出现任何问题,我确实收到了服务器预期的数据。事实上,应用程序的行为没有任何问题,我的数据很好,一切都按预期进行。但是,我的记录器仍然给我这些消息“在路径处使缓存无效:....”。看起来restkit试图删除缓存现有文件,但无法删除。正如所说,我只是担心这些操作对性能或苹果验证不利。 - Gael.D
我刚刚更新了我的答案,添加了更多信息。简短地说,它正在按照应该的方式运行,没有必要担心。为什么你不想要任何缓存? - drewish
这个问题确实有答案。问题就像真相一样,存在于那里 :) - Gael.D
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接