【发布时间】:2012-02-27 10:13:44
【问题描述】:
我很难尝试在 Restkit 框架中禁用缓存。 我尝试将缓存策略设置为无,完全没有效果。这样做的正确方法是什么?
【问题讨论】:
我很难尝试在 Restkit 框架中禁用缓存。 我尝试将缓存策略设置为无,完全没有效果。这样做的正确方法是什么?
【问题讨论】:
所以一旦你有了一个客户端,要么显式初始化它:
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 设置存储策略创建一个新缓存,包括清除先前的会话缓存以及(如果禁用缓存)永久缓存。这就是您在日志消息中看到的清除。
【讨论】: