我在我的应用程序中缓存CoreData中的数据,以便在没有新的情况下减少更新请求。
下面是伪代码中的缓存逻辑:
if cacheExistsInCoreData {
if cacheIsOutdated {
loadDataFromRemoteAndCacheItWithCurrentDate()
}else {
useCache()
}else {
loadDataFromRemoteAndCacheItWithCurrentDate()
}如何检查缓存是否过时:
func checkIfCacheIsOutdated {
if lastCachedDate isOrderThan selfDefinedCheckingDate {
return true // need to load new data
}else {
return false // just use cache
}
}这种机制几乎一直运作良好。
在罕见的情况下,我发现我的程序用正确的日期缓存错误的数据,这意味着用户可能会看到旧的数据,并且在新的数据可用时无法得到更新。
如果我的缓存逻辑没有什么问题,我想知道原因是否是当我的应用程序在更新之前获取远程数据,然后用最新的日期时间存储在核心数据中。
核心数据中的缓存包括:
数据(由远程服务器提供)//我无法用它做任何事. 日期(由我使用NSDate()提供)
在存储两个对象之前,如何确保它们正确连接(当前时间的最新数据)?
发布于 2016-01-27 07:32:17
假设您正在调用web,大多数web将返回缓存头。根据缓存头值缓存数据是安全的,这样就不会有任何过时的缓存。
发布于 2016-01-27 07:40:34
我遇到的对我有用的解决方案是在主队列NSManagedObjectContext上设置NSManagedObjectContext,如下所示:
objectContext.stalenessInterval = 0.0;这告诉扩展中的上下文每次都要获取新数据,而忽略缓存。
https://stackoverflow.com/questions/35030914
复制相似问题