2016-01-27 2 views
0

Я кэширую данные в 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())

Как я могу убедиться, что оба объекта правильно подключены (последние данные с текущим временем) перед их хранением?

ответ

0

Предполагая, что вы вызываете веб-api, большая часть веб-apis вернет заголовки кэша. Безопасно кэшировать данные на основе значения заголовка кэша, таким образом, не будет никакого устаревшего кеша.

0

Решение, которое я наткнулся, что работает для меня, чтобы установить stalenessInterval на главную очередь NSManagedObjectContext следующим образом внутри вашего расширения:

objectContext.stalenessInterval = 0.0; 

Это говорит контекст в расширении, чтобы получать новые данные каждый времени и игнорировать кеш.

Смежные вопросы